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