php的self与static
看一段代码:self和static的区别:
<?php
class A {
protected static $str = "This is class A";
public static function get(){
echo "当前调用的类名为:".get_called_class()."
";
echo "static:".static::$str."
"; //当前调用的类 B
echo "self:".self::$str; //访问的是当前方法所在的类 A
}
}
class B extends A{
protected static $str = "this is class B";
}
B::get()
?> 以上输出:当前调用的类名为:B static:this is class B self:This is class A
$this:代表一个对象,实例化后的对象,其实就是一个变量,特殊的变量,php变量前面都加$符号
self:代表某个类,它引用的是方法所在的类名,方法属于哪个类就引用哪个类
static:和self差不多,不过它引用的是当前的类名,也就是当前调用的类名。
所以在上述程序中:
self::$str:所在的类是A,所以最终执行A类的该方法
static::$str:当前调用是怎么调用的?B::get(),当前调用的是B类,所以它执行的是B类的该方法
上述static::$str,在php叫做后期静态绑定。