范围解析操作符 ::
双冒号,可以用来访问类的静态属性和静态方法以及常量。
在类的外部使用 双冒号
class Foobar{
static $hello = 'world';
}
// 输出 world
echo Foobar::$hello;
在类的内部使用 双冒号
// 类
class Foobar{
static $hello = 'world';
public function byStatic(){
echo static::$hello;
}
public function bySelf(){
echo self::$hello;
}
public function byThis(){
echo $this::$hello;
}
}
// 实例化
$foobar = new Foobar();
// 输出 world
$foobar->byStatic();
// 输出 world
$foobar->bySelf();
// 输出 world
$foobar->byThis();
调用父类的方法
// 父类
class Foo{
public function __construct(){
echo 'Foo::__construct';
}
}
// 子类
class Bar extends Foo{
public function __construct(){
// 调用父类的方法
parent::__construct();
echo 'Bar::__construct';
}
}
综合例子:
// 父类
class Foo{
public static function three(){
echo "a";
}
}
// 子类
class Bar extends Foo{
static $one = '1';
const TWO = 2;
public static function three(){
// 调用父类的方法
parent::three();
echo 'b';
}
}
// 静态方法
Bar::three();
// 静态属性
echo Bar::$one;
// 常量
echo Bar::TWO;
// 最终输出:ab12