Я настраиваю некоторые классы, которые имеют общий базовый класс. В каждом классе у меня есть несколько функций, к которым я обращаюсь через __call
метод.
class Test
{
private function meth1()
{
}
public function __call($name, $args)
{
call_user_func_array([$this, $name], $args);
return $this;
}
}
Поскольку каждая функция в классе по большей части просто возвращает $this
для метода сцепления я положил return $this
в __call
метод, чтобы избежать некоторой избыточности.
Так как у меня есть куча этих классов, которые расширяют TestClass
Я решил переместить __call
метод в этот базовый класс.
class BaseTest
{
public function __call($name, $args)
{
call_user_func_array([$this, $name], $args);
return $this;
}
}
class Test extends BaseTest
{
private function meth1()
{
}
}
Однако, когда я перемещаю его в базовый класс, я получаю Maximum function nesting level of '100' reached, aborting!
ошибка.
Есть ли способ сделать это в базовом классе или каждый класс должен иметь свой собственный __call
метод?
Также, почему возникает ошибка вложения?
Вы получаете ошибку, потому что private
метод недоступен в родительском классе.
Почему вы хотите, чтобы это было приватно?
Итак, чтобы заставить его работать, либо двигаться __call
в расширяющий класс, или сделайте метод protected
,
Кстати, вы действительно хотите вернуться $this
от __call
? Ты уверен в этом?
Других решений пока нет …