1、范围解析操作符(::)
范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。
当在类定义之外引用到这些项目时,要使用类名。
自 PHP 5.3.0 起,可以通过变量来引用类,该变量的值不能是关键字(如 self,parent 和 static)。
把 Paamayim Nekudotayim 选作双冒号操作符的名字似乎有些奇怪。然而,这是 Zend 开发小组在写 Zend Engine 0.5(被用于 PHP 3 中)时所作出的决定。
- <?php
- class MyClass {
- const CONST_VALUE = '付杰博客网址:www.fujieace.com!' ;
- }
- $classname = 'MyClass' ;
- echo $classname :: CONST_VALUE ; // 自 PHP 5.3.0 起 //付杰博客网址:www.fujieace.com!
- echo MyClass :: CONST_VALUE ;//付杰博客网址:www.fujieace.com!
注意:
self , parent 和 static 这三个特殊的关键字是用于在类定义的内部对其属性或方法进行访问的。
2、Static(静态)关键字
本页说明了用 static 关键字来定义静态方法和属性。static也可用于定义静态变量以及后期静态绑定。参见上述页面了解 static 在其中的用法。
声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
为了兼容 PHP 4,如果没有指定访问控制,属性和方法默认为公有。
由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
静态属性不可以由对象通过 -> 操作符来访问。
用静态方式调用一个非静态方法会导致一个 E_STRICT 级别的错误。
就像其它所有的 PHP 静态变量一样,静态属性只能被初始化为文字或常量,不能使用表达式。所以可以把静态属性初始化为整数或数组,但不能初始化为另一个变量或函数返回值,也不能指向一个对象。
自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static。
- <?php
- class Foo
- {
- public static $my_static = '个人品牌:付杰博客!' ;
- public function staticValue () {
- return self :: $my_static ;
- }
- }
- class Bar extends Foo
- {
- public function fooStatic () {
- return parent :: $my_static ;
- }
- }
- print Foo :: $my_static;//个人品牌:付杰博客!
- $foo = new Foo ();
- print $foo -> staticValue ();//个人品牌:付杰博客!
- //print $foo -> my_static; // Notice: Undefined property: Foo::$my_static
- print $foo :: $my_static ;//个人品牌:付杰博客!
- $classname = 'Foo' ;
- print $classname :: $my_static ; // As of PHP 5.3.0 //个人品牌:付杰博客!
- print Bar :: $my_static ; //个人品牌:付杰博客!
- $bar = new Bar ();
- print $bar -> fooStatic () ; //个人品牌:付杰博客!