【问题标题】:If i extend a static class in PHP, and the parent class refers to "self::", will this refer to the self in the extended class?如果我在 PHP 中扩展一个静态类,并且父类引用“self::”,这是否会引用扩展类中的 self?
【发布时间】:2010-09-16 02:07:16
【问题描述】:

如果我在PHP中扩展了一个静态类,并且父类引用了“self::”,这是否会引用扩展类中的self?

所以,例如

<?php 
Class A
{
    static $var  
    public static function guess(){self::$var = rand(); return $var}
}        

Class B extends Class A
{
    public static function getVar(){return self::$var}
}

如果我跑了 B::猜测(); 然后 B::getVar();

是存储在 A::$var 还是 B::$var 中的 Var 的值?

谢谢。

【问题讨论】:

    标签: php class static extends


    【解决方案1】:

    Late static binding 是在 PHP 5.3 中引入的,它允许您控制这种行为。

    【讨论】:

      【解决方案2】:

      很容易测试:

      class ClassA {
          public static function test(){ self::getVar(); }
          public static function getVar(){ echo 'A'; }
      }        
      
      class ClassB extends ClassA {
          public static function getVar(){ echo 'B'; }
      }
      
      ClassA::test(); // prints 'A'
      
      ClassB::test(); // also prints 'A'
      

      ...希望有帮助:)

      【讨论】:

        【解决方案3】:

        附加信息,self 或 $this 的用法与扩展类不同

        class ClassA {
            public function test(){ self::getVar(); }
            public function test2(){ $this->getVar(); }
            
            public function getVar(){ echo 'A'; }
        }        
        
        class ClassB extends ClassA {
            public function getVar(){ echo 'B'; }
        }
        
        $classB = new ClassB();
        $classB->test(); // prints 'A'
        $classB->test2(); // prints 'B'
        

        【讨论】:

          猜你喜欢
          • 2020-05-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-24
          • 2010-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多