【发布时间】:2012-04-14 01:57:13
【问题描述】:
PHP中是否有一个神奇的方法,每次调用另一个方法时都会调用它? __callStatic() 和 __call() 魔术方法似乎仅在方法不存在时才有效。
【问题讨论】:
标签: php oop magic-methods
PHP中是否有一个神奇的方法,每次调用另一个方法时都会调用它? __callStatic() 和 __call() 魔术方法似乎仅在方法不存在时才有效。
【问题讨论】:
标签: php oop magic-methods
没有。您要求的内容称为"advice" 或aspect oriented programming。我相信有一些实验性扩展可以在 PHP 中实现这一点,但你不想在生产中使用。
您可以做的是创建一个包装器,通过__call 委托所有调用。例如:
class Foo {
function bar() {
echo "Foo::bar\n";
}
}
class AdviceWrapper {
protected $subject;
function __construct($subject) {
$this->subject = $subject;
}
function __call($name, $args) {
echo "Before $name\n";
$result = call_user_func_array(array($this->subject, $name), $args);
echo "After $name\n";
return $result;
}
}
$foo = new AdviceWrapper(new Foo());
$foo->bar();
另见:https://stackoverflow.com/questions/4738282/are-there-any-working-aspect-oriented-php-libraries
【讨论】:
你为什么需要这个?您可以只创建一个方法并在开始时在每个方法中调用它。
编辑: 您搜索的内容类似于 php 中的面向方面编程。 在谷歌上快速搜索发现这里: http://code.google.com/p/apdt/
也许有帮助。
【讨论】:
你能重命名你的方法并在它们前面加上一个 _ 吗?那么所有的呼叫都会通过 __call / __callStatic 路由?
【讨论】: