PHP: вызов функции всякий раз, когда вызывается функция в дочернем классе
Внутри одного класса я могу использовать функции _call /_callStatic для вызова функции до ее фактического запуска. Однако мне еще предстоит найти решение, которое я могу применить к родителю, и оно будет унаследовано детьми.
Единственный способ, о котором я могу подумать, - это поместить небольшой фрагмент кода в каждый класс, который вызывает функцию в родительском элементе, который содержит мой код.
Есть ли лучшие решения, которые я могу реализовать?
3 ответа
Пока вы хотя бы на php 5.4, вы можете использовать черты. http://php.net/traits
Это потребует некоторых корректировок в вашем коде, но может позволить желаемое поведение. У вас есть еще какая-то информация о вашем случае использования? Я думаю о регистрации из вашего описания, это правильно?
К сожалению, в PHP нет магических методов, которые запускаются при вызове любого метода.
Я думаю, что решение, которое вы ищете, это декоратор, см. Эту статью с советами по украшению методов / классов в PHP.
Трудно помочь вам, не видя некоторый код. Однако, если вы не переопределите __call
/ __callStatic
в подклассе он должен просто наследовать метод от своего суперкласса.
Если вы переопределите __call
/ __callStatic
в подклассе он переопределяет определение суперкласса. Так что вам нужно как-то вызвать метод суперкласса. Для этого вы можете использовать parent
ключевое слово. Смотрите этот пример:
class SuperClass
{
public function __call($name, $arguments)
{
// Do some stuff
}
}
class SubClass extends SuperClass
{
public function __call($name, $arguments)
{
// Execute the parent's __call() method
return parent::__call($name, $arguments);
// Do some extra stuff here
}
}