Как вызвать функцию автоматически, когда я вызываю функции-члены класса?

В 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()
{
}
}

Этот класс содержит много функций Я не могу добавить эту функцию во все функции

2

Решение

Если не хочешь полноценная библиотека АОП, Вы можете начать с небольшой оболочки, как это:

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
3

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

Вы должны посмотреть на PHP магическая функция __call который позволяет реализовать метод перегрузки.

0

Хотя то, что я пишу здесь, не является ответом на каждое высказывание, вы должны быть предельно осторожны при использовании __CALL, как предлагается здесь. Основная причина заключается в том, что вы теряете контроль над видимостью функций, все функции доступны, что может или не может быть тем, что вы хотите.

Однако, кроме __CALL, то, что вы хотите, называется прокси-оберткой, посмотрите ответ ocramius в этой теме:

Как автоматически вызывать функцию в php для каждого вызова другой функции

Обратите внимание, что всегда следует избегать __CALL, если ответ __CALL, вопрос, как правило, неправильный.

0
По вопросам рекламы [email protected]