先看一段代码:
abstract class domainObject{
static $name = 'domain';
public static function create(){
return self::$name;
}
}
class document extends domainObject{
static $name = 'document';
}
var_dump(document::create());
运行结果:string ‘domain’ (length=6)
self被解析为定义create()的domainObject,而不是解析为调用self的document类;
通过引入延迟静态绑定概念,将上述代码中父类的self:: 替换为static::,
abstract class domainObject{
static $name = 'domain';
public static function create(){
return static::$name;
}
}
class document extends domainObject{
static $name = 'document';
}
var_dump(document::create());
运行结果即为:string ‘document’ (length=8)
延迟静态绑定可使php在子类中查找所有的属性、值