Как переопределить метод php на месте - PullRequest
2 голосов
/ 13 октября 2010

Как мне переопределить метод класса в php in situ, т.е. без его расширения?

Я бы расширил, если бы мог, но не могу.

Ответы [ 3 ]

3 голосов
/ 13 октября 2010

Возможно, уже ответили на этот вопрос здесь .Короткий ответ, вы можете сделать это с помощью runkit PHP, но он выглядит ужасно устаревшим (то есть не был затронут с 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 голос
/ 13 октября 2010

Вы имеете в виду перегрузить метод? Ты не можешь PHP не поддерживает перегрузку. Вы должны либо создать новый метод в том же классе, либо переопределить его в дочернем классе.

.. или это было бы так, за исключением методов __call () и __callStatic (). Они позволяют передавать имя метода и аргументы в качестве параметров. Вы можете проверить имя метода и аргументы для имитации перегрузки. Если аргументы отличаются, но имя метода совпадает, выполните действие, отличное от обычного.

0 голосов
/ 13 октября 2010

Без расширения вы можете вызывать метод из одного класса в другом. Но это плохая практика.

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

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