use*_*141 4 php oop static function late-static-binding
我从网站上获得的一个代码示例,但我很难理解输出.我正在分享代码:
class A
{
public static function foo()
{
static::who();
}
public static function who()
{
echo __CLASS__."\n";
}
}
class B extends A
{
public static function test()
{
A::foo();
parent::foo();
self::foo();
}
public static function who()
{
echo __CLASS__."\n";
}
}
class C extends B
{
public static function who()
{
echo __CLASS__."\n";
}
}
C::test();
Run Code Online (Sandbox Code Playgroud)
输出如下::
A
C
C
Run Code Online (Sandbox Code Playgroud)
如果解释上面的输出,我会得到很大的帮助.提前致谢.
我从网站上获得的一个代码示例,但我很难理解输出.我正在分享代码
此代码是来自Late Static Binding概念的PHP手册的精确副本.
后期静态绑定的解析将在完全解析的静态调用时停止,不会回退.另一方面,使用parent ::或self ::等关键字的静态调用将转发调用信息.
当你这样做.. C::test();,该test()下class B将被调用,因为没有test()可用的class C.
所以你显然在这里..
public static function test()
{
A::foo();
parent::foo();
self::foo();
}
Run Code Online (Sandbox Code Playgroud)
A::foo();正如您从上面的语句中读到的那样.后期静态绑定的解析将停止在完全解析的静态调用而没有回退,因此,因为它是一个完全解析的静态调用,您将得到一个输出A
parent::foo();和 self::foo();同样,从上面的语句中.. 使用parent ::或self ::等关键字的静态调用将转发调用信息.
所以这显然会打印C和C ..因为你做到了C::test();,这class C是实际的调用者.