self::CONSTANT_NAME
和static::CONSTANT_NAME
之间有什么区别?
仅通过static::
调用5.3功能吗?
答案 0 :(得分:6)
当你使用static :: NAME时,它是一个称为后期静态绑定(或LSB)的功能。有关此功能的更多信息,请访问LSB的php.net文档页面:http://nl2.php.net/manual/en/language.oop5.late-static-bindings.php
这个用例就是一个例子:
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
self::who();
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test();
?>
这输出A,这并不总是令人满意的。现在用self
替换static
会产生以下结果:
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // Here comes Late Static Bindings
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test();
?>
并且,正如您所料,它输出“B”
答案 1 :(得分:5)
差异几乎就是late static bindings的全部内容。
简短说明:
self::
将引用类型,其中使用self ::编写的代码。
static::
将引用实际对象的类类型,其中使用static ::的代码正在执行。
这意味着如果我们讨论同一继承层次结构中的类,那就只有区别了。