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叫做后期静态绑定。