В php есть какой-либо возможный способ автоматического вызова новой функции при вызове функции-члена класса
Например: у меня есть класс с 4 функциями-членами.
И тогда я создал объект для этого класса.
Теперь я собираюсь вызывать любую функцию по мере необходимости.
Когда я вызываю любую из функций этого класса. Мне нужно было сделать некоторые набор / логика, как я могу это сделать
Примечание: я не хочу вызывать новую функцию внутри определенных функций, а также не нужно писать логику для всех определенных функций. Я ищу любые магические методы. Пожалуйста, посоветуйте мне
Class IMAP{
Function IMAP()
{
Do something
}
Function getfolders() {
Do something
}
Function appendmessage()
{
Do something
}
//I need to call the below function whenever I am going to call any one of the function
Function checktokenexpired()
{
}
}
Этот класс содержит много функций Я не могу добавить эту функцию во все функции
Если не хочешь полноценная библиотека АОП, Вы можете начать с небольшой оболочки, как это:
class AOP
{
function __construct($base, $methods) {
$this->base = $base;
$this->methods = $methods;
}
function __call($name, $args) {
$this->methods["before_$name"]($args);
$ret = call_user_func_array([$this->base, $name], $args);
$this->methods["after_$name"]($ret);
return $ret;
}
}
Использование как это:
class Foo
{
function bar() {
echo "bar \n";
}
}
$foo = new AOP(new Foo, [
'before_bar' => function() { echo "BEFORE\n"; },
'after_bar' => function() { echo "AFTER\n"; },
]);
$foo->bar(); // prints BEFORE...bar...AFTER
Вы должны посмотреть на PHP магическая функция __call
который позволяет реализовать метод перегрузки.
Хотя то, что я пишу здесь, не является ответом на каждое высказывание, вы должны быть предельно осторожны при использовании __CALL, как предлагается здесь. Основная причина заключается в том, что вы теряете контроль над видимостью функций, все функции доступны, что может или не может быть тем, что вы хотите.
Однако, кроме __CALL, то, что вы хотите, называется прокси-оберткой, посмотрите ответ ocramius в этой теме:
Как автоматически вызывать функцию в php для каждого вызова другой функции
Обратите внимание, что всегда следует избегать __CALL, если ответ __CALL, вопрос, как правило, неправильный.