网站首页学无止境PHP

PHP Static 关键字

发布时间:2014-07-23 15:42:33编辑:songlin阅读(67)

      声明类成员或方法为static,就可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员(静态方法除外)。

      为了兼容PHP4,如果没有指定“可见性”,属性和方法默认为public。

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

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

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

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

      PHP5.3.0之后,我们可以用一个变量来动态调用类。但该变量的值不能为关键字self, parent或static。

      Example #1 静态成员代码示例

      

      

    1. class Foo 
    2.  
    3.   { 
    4.  
    5.   public static $my_static = 'foo'
    6.  
    7.   public function staticValue() { 
    8.  
    9.   return self::$my_static
    10.  
    11.   } 
    12.  
    13.   } 
    14.  
    15.   class Bar extends Foo 
    16.  
    17.   { 
    18.  
    19.   public function fooStatic() { 
    20.  
    21.   return parent::$my_static
    22.  
    23.   } 
    24.  
    25.   } 
    26.  
    27.   print Foo::$my_static . " "
    28.  
    29.   $foo = new Foo(); 
    30.  
    31.   print $foo->staticValue() . " "
    32.  
    33.   print $foo->my_static . " "// Undefined "Property" my_static 
    34.  
    35.   print $foo::$my_static . " "
    36.  
    37.   $classname = 'Foo'
    38.  
    39.   print $classname::$my_static . " "// PHP 5.3.0之后可以动态调用 
    40.  
    41.   print Bar::$my_static . " "
    42.  
    43.   $bar = new Bar(); 
    44.  
    45.   print $bar->fooStatic() . " "
    46.  
    47.   ?> 
    48.  
    49.   Example #2 静态方法代码示例 
    50.  
    51.    
    52.   class Foo { 
    53.  
    54.   public static function aStaticMethod() { 
    55.  
    56.   // ... 
    57.  
    58.   } 
    59.  
    60.   } 
    61.  
    62.   Foo::aStaticMethod(); 
    63.  
    64.   $classname = 'Foo'
    65.  
    66.   $classname::aStaticMethod(); // As of PHP 5.3.0 
    67.  
    68.   ?>