PHP: вызов функции всякий раз, когда вызывается функция в дочернем классе

Внутри одного класса я могу использовать функции _call /_callStatic для вызова функции до ее фактического запуска. Однако мне еще предстоит найти решение, которое я могу применить к родителю, и оно будет унаследовано детьми.

Единственный способ, о котором я могу подумать, - это поместить небольшой фрагмент кода в каждый класс, который вызывает функцию в родительском элементе, который содержит мой код.

Есть ли лучшие решения, которые я могу реализовать?

3 ответа

Пока вы хотя бы на php 5.4, вы можете использовать черты. http://php.net/traits

Это потребует некоторых корректировок в вашем коде, но может позволить желаемое поведение. У вас есть еще какая-то информация о вашем случае использования? Я думаю о регистрации из вашего описания, это правильно?

К сожалению, в PHP нет магических методов, которые запускаются при вызове любого метода.

Я думаю, что решение, которое вы ищете, это декоратор, см. Эту статью с советами по украшению методов / классов в 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
    }
}
Другие вопросы по тегам