Использование __call в родительском / базовом классе?

Я настраиваю некоторые классы, которые имеют общий базовый класс. В каждом классе у меня есть несколько функций, к которым я обращаюсь через __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 метод?

Также, почему возникает ошибка вложения?

0

Решение

Вы получаете ошибку, потому что private метод недоступен в родительском классе.

Почему вы хотите, чтобы это было приватно?

Итак, чтобы заставить его работать, либо двигаться __call в расширяющий класс, или сделайте метод protected,

Кстати, вы действительно хотите вернуться $this от __call? Ты уверен в этом?

0

Другие решения

Других решений пока нет …