范围解析操作符或者更简单地说是一对冒号‘::’
作用:用于访问 静态成员、类常量、访问被覆盖类中的方法
类外部:类名::常量名、静态成员
类内部:self::常量名、静态成员 parent::常量名、静态成员、覆盖类中方法
静态成员
在声明成员的时候只需要在其可见性前或者后加上 static 则该成员就是静态成员
可见性 static 变量名[=值];
可见性 static function 方法名(...){ }
将变量声明为静态的作用:
1. 类的静态成员和函数里的静态变量相似
2. 静态变量不能被通过对象访问到, 直到通过类名称(在类内部通过 self 等)和范围解析操作符来访问
3. 既然不能通过类访问那么它就和该类的所有实例没有关系了
那到底有啥用呢?
<?php
class Test{
public static $counter=0;
function _construct(){
self::$counter++;
}
}
new Test();
new Test();
new Test();
echo '<p>'.Test::$counter.'</p>';
new Test();
echo '<p>'.Test::$counter.'</p>';
将方法声明为静态方法的作用:
不通过实例化即可访问这些方法,当然通过实例化的对象也能访问
由于静态方法不需要通过对象即可调用,所以 $this 在静态方法中不可用。
1. 声明类属性或方法为静态,就可以不实例化类而直接访问、共享其值。
2. 静态属性不可以由类的实例通过 -> 操作符来访问(但静态方法可以)。
3. 静态属性只能被初始化为文字或常量,不能使用表达式。所以可以把静态属性初始化为整数或数组,但不能初始化为另一个变量或函数返回值,也不能指向一个对象