static 关键字,这里作为作用域引用。类似于parent, self等关键字。与parent和self不同的是,parent 引用的是父类作用域,self引用的是当前类的作用域,而static引用的是全部静态作用域,子类会覆盖父类,
<?php
/*self就是写在哪个类里面, 实际调用的就是这个类.static代表使用的这个类, 就是你在父类里写的static,然后被子类覆盖,使用的就是子类的方法或属性*/
class Person
{
public static function name()
{
echo "xiaosan";
echo "<br />";
}
public static function callself()
{
self::name();
}
public static function callstatic()
{
static::name();
}
}
class Man extends Person
{
public static function name()
{
echo "gaojin";
echo "<br />";
}
}
Person::callself(); // output: xiaosan
Person::callstatic(); // output: xiaosan
Man::callself(); // output: xiaosan
Man::callstatic(); // output: gaojin
?>
<?php
/*self - 就是这个类,是代码段里面的这个类。
static - PHP 5.3加进来的只得是当前这个类,有点像$this的意思,从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类。*/
class A {
public static function get_self() {
return new self();
}
public static function get_static() {
return new static();
}
}
class B extends A {}
echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self());//A
echo get_class(A::get_static()); // A