如何在原位覆盖php方法

时间:2010-10-13 11:40:43

标签: php methods override

如何在原位覆盖php中的类方法,即不扩展它?

如果可以,我会延长,但我不能。

3 个答案:

答案 0 :(得分:3)

可能已在此question here中回答。简短的回答,你可以用PHP的runkit来做,但它看起来非常过时(即自2006年以来没有被触及)并且可能不再有效。

您最好的选择可能是重命名原始类,然后使用原始名称扩展它。那是

class bad_class { 
    public function some_function {
        return 'bad_value';
    }
}

变为

class old_bad_class { 
    public function some_function {
        return 'bad value';
    }
}        

class bad_class extends old_bad_class { 
    public function some_function {
        return 'good value';
    }
}

答案 1 :(得分:1)

你的意思是重载方法?你不能。 PHP不支持重载。您必须在同一个类中创建一个新方法,或者在子类中重写它。

..或者除了__call()和__callStatic()方法之外的情况。这些允许您将方法名称和参数作为参数传递。您可以检查方法名称和参数以模拟重载。如果参数不同但方法名称相同,则执行与正常情况不同的操作。

答案 2 :(得分:-1)

如果没有扩展,你可以从另一个类中调用方法。但这是一种不好的做法。

class First
{
   public function doIt()
   {
      echo 'Done';
   }
}

class Second
{
   public function doIt()
   {
      $first = new First;
      $first->doIt();
   }   
}