首页 -> Zend PHP 5 认证指南 第二版 -> 第六章:PHP的面向对象技术 Object Oriented Programming in PHP 6.3 常量、静态方法和属性 Constants, Static Method and Properties
第六章:PHP的面向对象技术 Object Oriented Programming in PHP 6.3 常量、静态方法和属性 Constants, Static Method and Properties
2010-04-26 13:42:22
作者:Siemen

根据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()定义的常量来的高。