道者编程

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


最新评论:
我要评论:

看不清楚