static关键字,const常量

一、static关键字

这里说明了用 static 关键字来定义静态方法和属性。static 也可用于定义静态变量以及后期静态绑定。参见上述页面了解 static 在其中的用法。

static静态的,修饰类的属性方法,称静态资源

声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

为了兼容 PHP 4,如果没有指定访问控制,属性和方法默认为公有。

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。

静态属性不可以由对象通过 -> 操作符来访问。

用静态方式调用一个非静态方法会导致一个 E_STRICT 级别的错误。

就像其它所有的 PHP 静态变量一样,静态属性只能被初始化为文字或常量,不能使用表达式。所以可以把静态属性初始化为整数或数组,但不能初始化为另一个变量或函数返回值,也不能指向一个对象。

自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 selfparent 或 static

静态属性示例

<?php
class  Foo
{
    public static  $my_static  =  ‘foo‘ ;

    public function  staticValue () {
        return  self :: $my_static ;
    }
}

class  Bar  extends  Foo
{
    public function  fooStatic () {
        return  parent :: $my_static ;
    }
}

print  Foo :: $my_static  .  "\n" ;

$foo  = new  Foo ();
print  $foo -> staticValue () .  "\n" ;
print  $foo -> my_static  .  "\n" ;       // Undefined "Property" my_static 

print  $foo :: $my_static  .  "\n" ;
$classname  =  ‘Foo‘ ;
print  $classname :: $my_static  .  "\n" ;  // As of PHP 5.3.0

print  Bar :: $my_static  .  "\n" ;
$bar  = new  Bar ();
print  $bar -> fooStatic () .  "\n" ;
?>
   </programlisting>
  </example>

  <example>
   <title>静态方法示例</title>
    <programlisting role="php">
<![CDATA[
<?php
class  Foo  {
    public static function  aStaticMethod () {
         // ...
     }
}

Foo :: aStaticMethod ();
$classname  =  ‘Foo‘ ;
$classname :: aStaticMethod ();  // 自 PHP 5.3.0 起
?>
class CeShi{
    protected $name;
    //定义静态变量
    static $num=100;
    public function tesst(){
        echo $this->name;
              echo $this->$num;//不可以用
        echo self::$num;//在类的内部访问静态变量使用关键字self后面跟上范围解析操作符(简称一对冒号)
    }
}
//在类的外部访问变量
echo CeShi::$num;
//实例化对象
$cs=new CeShi();
$cs->tesst();
$cs->$NUM;//这样是不行的
$cs::$num;

class CeShi{
    protected $name;
    //在类中定义常量,使用关键字const
    const NUM=10;
    //定义静态变量
    static $num=100;
    public function test(){
        echo $this->name;
//        echo $this->NUM;//这样是不可以的
        echo $this->$num;//不可以用
        echo self::$num;//在类的内部访问静态变量使用关键字self后面跟上范围解析操作符(简称一对冒号)

        //在类的内部访问静态方法
//        $this->test2();//方法中可以调用静态方法
        self::test2();//方法中可以调用静态方法,标准写法
    }

    public static function test2(){
        //静态方法中不能使用$this
        //$this->name;//不能用
        echo ‘调用了静态方法‘;
        //静态中访问非静态方法是不行的,但可以访问静态静态属性和方法
    }
}
//在类的外部访问变量
echo CeShi::$num;
//实例化对象
$cs=new CeShi();
$cs->test();
//实例化对象访问常量
//$cs->$NUM;//这样是不行的
$cs::$num;

//重新实例化对象,改变静态变量的值
//静态变量是全局变量,每个静态属性在内存中永远只会保存一个备份
$sc=new CeShi();
$sc::$num=500;
echo $cs::$num;//500
echo $cs::$num;//500

//在类的外部访问静态方法
echo CeShi::test2();
echo $cs::test2();
echo $cs->test2();//不推荐的写法
//不实例化类直接进行访问

二、类中的常量定义修饰符

const是一个定义常量的关键字,在PHP中定义常量使用的是“define()”这个函数,但是在类里面定义常量使用的是“const”这个关键字,类似于C中的#define如果在程序中改变了它的值,那么会出现错误,用“const”修饰的成员属性的访问方式和“static”修饰的成员访问的方式差不多,也是使用“类名”,在方法里面使用“self”关键字。但是不用使用“$”符号,也不能使用对象来访问

define(‘MYNUM‘,1000);//有三个参数,第三参数可以省略,表示区不区分大小写
//检测定义的常量是否存在使用defined
echo MYNUM;
//isset只能判断变量是否有值
//在类中定义常量
class CeShi{
    protected $name;
    const NUM=10;
    public function tesst(){
        echo $this->name;
        echo $this->NUM;//这样是不可以的
    }
}

class CeShi{
    protected $name;
    //在类中定义常量,使用关键字const
    const NUM=10;
    public function tesst(){
        echo $this->name;
//        echo $this->NUM;//这样是不可以的
        echo self::NUM;//在类的内部访问常量使用关键字self后面跟上范围解析操作符(简称一对冒号)
    }
}
//在类的外部访问常量
echo CeShi::NUM;
//实例化对象
$cs=new CeShi();
$cs->tesst();
//实例化对象访问常量
$cs->NUM;//这样是不行的
$cs::NUM;
时间: 2024-08-10 10:14:44

static关键字,const常量的相关文章

PHP 面向对象中常见关键字使用(final、static、const和instanceof)

PHP 面向对象中常见关键字的使用: 00x1.Final :final关键字可以加在类或者类中方法之前,但是不能使用final标识成员属性. 作用: 使用final标识的类,不能被继承. 在类中使用final标识的成员方法,在子类中不能覆盖. 总结:final表示为最终的意思,所以使用final关键字的类或者类中的成员方法是不能被更改的. 00x2.Static :static关键字将类中的成员属性或者成员方法标识为静态的,static标识的成员属性属于整个类,static成员总是唯一存在的,

关键字const和static

static 关键字的作用: 1.变量的内存只被分配一次 2.他的作用域跟其他变量无差别 关键字const 不是常数,可以是变量,只是你不能修改它 1) 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的.如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息.(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的.) 2) 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码. 3

关键字static和const的作用

一.在C语言中,关键字static的作用: (1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: (2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问: (3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内:(4)在类中的static成员变量意味着它为该类的所有实例所共享,也

C语言之头文件,static与const关键字

[前言] 最近几个月在做一个C语言代码重构的项目,过程中也让我对之前在书本上学习到的东西有些补充和巩固,在本博中总结记录下,梳理下零碎的知识点和经验也加深印象,书写是为了更好地思考.平时也都是用印象笔记之类的自己写写笔记,今天整理成博客,以便自己以后回顾. [正文] C语言头文件:将其理解为C语言模块化编程向外提供一个接口描述文件.一般包括一些供外部函数或者文件使用的变量声明,函数声明,数据类型定义以及宏定义等.举例: /*************************************

C语言中Static和Const关键字的的作用

程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中. 1.作用于变量: 用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态 存储的,即指令执行到变量定义处时才给变量分配存储单元,跳出代码块时释放内存单元(生命期).用static声明局部变量时,则改变变量的存储方式(生 命期),使变量成为静态的局部变量,即编译时就为变量分配内存,直到程序退出才释放存储单元.这样,使

【PHP面向对象(OOP)编程入门教程】15.static和const关键字的使用(self::)

static关键字是在类中描述成员属性和成员方法是静态的:静态的成员好处在哪里呢?前面我们声明了“Person”的人类,在“Person”这个类里如果我们加上一个“人所属国家”的属性,这样用“Person”这个类实例化出几百个或者更多个实例对象,每个对象里面就都有“所属国家”的属性了,如果开发的项目就是为中国人而开发的,那么每个对象里面就都有一个国家的属性是 “中国“其它的属性是不同的,如果我们把“国家”的属性做成静态的成员,这样国家的属性在内存中就只有一个,而让这几百个或更多的对象共用这一个属

PHP面向对象(OOP):.static和const关键字的使用(self::)

static关键字是在类中描述成员属性和成员方法是静态的:静态的成员好 处在哪里呢?前面我们声明了“Person”的人类,在“Person”这个类里如果我们加上一个“人所属国家”的属性,这样用“Person”这个类实 例化出几百个或者更多个实例对象,每个对象里面就都有“所属国家”的属性了,如果开发的项目就是为中国人而开发的,那么每个对象里面就都有一个国家的属性 是 “中国“其它的属性是不同的,如果我们把“国家”的属性做成静态的成员,这样国家的属性在内存中就只有一个,而让这几百个或更多的对象共用这

iOS开发中Static和Const关键字的的作用

1.作用于变量: 用static声明局部变量时,则改变变量的存储方式(生命期),使变量成为静态的局部变量,即编译时就为变量分配内存,直到程序退出才释放存储单元.这样,使得该局部变量有记忆功能,可以记忆上次的数据,不过由于仍是局部变量,因而只能在代码块内部使用(作用域不变). 用static声明外部变量-------外部变量指在所有代码块{}之外定义的变量,它缺省为静态变量,编译时分配内存,程序结束时释放内存单元.同时 其作用域很广,整个文件都有效甚至别的文件也能引用它.为了限制某些外部变量的作用

static关键字以及字符串常量的理解

一.作用域.链接属性以及存储类型: 1.      作用域:常见作用域有代码块.文件.函数以及原型作用域(只适用于在函数原型中声明的参数名). 2.      链接属性: a)        链接可以将多个目标文件链接生成最后的目标文件.链接属性则是决定如何处理在不同文件中出现的标识符. b)        链接属性总共有三种:external(外部).internal(内部)以及none(无).默认情况下标识符一般是外部或者无属性,但是,通过static关键字,则可以改变标识符的属性,将外部属