Учитывая класс A, который расширяет класс B, как я могу вызвать вызовы функции __call класса A, переопределить соответствующую функцию, унаследованную от родителя?Как магические методы переопределяют наследование
Рассмотрим упрощенный пример:
class A
{
public function method_one()
{
echo "Method one!\n";
}
}
class B extends A
{
public function __call($name, $args)
{
echo "You called $name!\n";
}
}
$b = new B();
$b->method_one();
Когда я бегу, я получаю выход Method one!
. Я хочу получить выход You called method_one!
.
Итак, как я могу использовать магический метод подкласса, переопределяющий метод родительских классов?
Мне нужно расширить объект, потому что мне нужен доступ к защищенному методу в A, но я хочу передать все общедоступные методы в свой собственный обработчик __call. Есть какой-либо способ сделать это?
__call только переопределяет методы, которые Арен» t в противном случае доступный; ваш метод method() является общедоступным, поэтому он доступен. Попробуйте сделать его защищенным –
Почему бы вам просто не использовать нормальное переопределение? –
@ShankarDamodaran, потому что у меня есть большое количество функций, которые я хочу переопределить. Единственная причина, по которой я его продюсирую, - это получить доступ к защищенному методу, который мне нужен. – Benubird