Php 在类内获取类常量
Php 在类内获取类常量,php,Php,self::CONSTANT\u NAME和static::CONSTANT\u NAME之间有什么区别 是否仅通过静态调用常量::5.3功能?差别很大 简要说明: self::将引用使用self::编写代码的类类型 static::将引用正在其上执行使用static::的代码的实际对象的类类型 这意味着,如果我们讨论的是同一继承层次结构中的类,那么这只是一个区别。当您使用static::NAME时,它是一种称为后期静态绑定(或LSB)的功能。有关此功能的更多信息,请参阅LSB的php.net文
self::CONSTANT\u NAME
和static::CONSTANT\u NAME
之间有什么区别
是否仅通过
静态调用常量::
5.3功能?差别很大
简要说明:
self::
将引用使用self::编写代码的类类型
static::
将引用正在其上执行使用static::的代码的实际对象的类类型
这意味着,如果我们讨论的是同一继承层次结构中的类,那么这只是一个区别。当您使用static::NAME时,它是一种称为后期静态绑定(或LSB)的功能。有关此功能的更多信息,请参阅LSB的php.net文档页面: 此用例就是一个例子:
<?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();
?>
而且,正如您所料,它输出“B”这与后期静态绑定有关。但是,甚至可以重写类常量吗?如果不是的话,我相信这是无关紧要的。
<?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();
?>