有时,可能有必要创建共所有类实例共享的属性和方法,这些属性和方法与所有的类实例有关,但不能由任何特定对象调用。
例如,假设要编写一个类来跟踪网页访问者的数量。你一定不希望每次实例化该类时访问者数量重置为0,此时就可以将该属性设置为static作用域:
<?php
class Visitor{
private static $visitors = 0;
function __construct(){
self::$visitors++;
}
static function getVisitors(){
return self::$visitors;
}
}
//实例化Visitor类
$visits = new Visitor();
echo Visitor::getVisitors()."<br/>";
//实例化另一个Visitor类
$visits2 = new Visitor();
echo Visitor::getVisitors()."<br/>";
?>
因为$visitors 属性被声明为static,所以对其值的任何改变(在这里通过类构造函数来修改)都会反应到所有实例化对象中。
注意:静态属性和方法应使用self 关键字和类名来引用,而不是通过$this 和箭头操作符。 这是因为使用“正常”方法引用静态属性是不可能的,会导致语法错误。