根据PPP,PHP5也实现了静态方法与属性。与普通的方法与属性不同,是以静态的方式存,作为类本身的一部分访问,与只存在于实例中相反。这样允许类当成是一个容器与函数与数据进行交互——从另一方面看这是对付函数命名冲突的非常有效的方法。
在PHP4中允许使用::操作符来把类中的任何方法作为静态方法调用(官方的Paamayim Nekudotayim——希伯来语,意思是“双冒号”),PHP5中把这个区分开来了,只有被static修饰的属性和方法才可以这样访问和使用。
PHP对于静态属性非常严格;如果使用->来访问静态变量或者属性(比如 $obj->propertiy)就会提示一条“strict standards”的信息和一个提示。使用非静态的方法的途径调用静态方法将会得到一个“strict standard”的消息。
class foo { static $bar = "bat"; public static function baz() { echo "Hello World"; } } $foo = new foo(); $foo->baz();
运行结果:
Hello WorldPHP Strict Standards: Accessing static property foo::$bar as nonstatic in PHPDocument1 on line 17 Strict Standard: Accessing static property foo::$bar as non static in PHPDocument1 on line 1
Siemen注,实际测试中并没有发现这个消息,只是看到了一个提示,显示说变量不存在。
有必要给静态的变量或者方法修饰作用域,如果不修饰,默认为public。
6.3.1 类常量
类常量与普通常量一样,只不是他们在类中而已。类常量是public的,允许内外部调用;下例运行结果是Hello World:
class foo { const BAR = "Hello World"; } echo foo::BAR;
作者提示:类常量与普通常量一样,只能容纳标量。
类常量与普通常量相比具有更多特性:因为包含在类中,代码更加简洁容易阅读,同时运行效率也比使用define()定义的常量来的高。