在 PHP 中是否可以在调用类中的函数时触发事件,而无需将事件添加到类中的每个函数?
例子:
<?php
class A {
function xxx() {
//this function will be called everytime I call another function in this class
}
public static function b() {
return 'Hello Stackoverflow!';
}
public static function c() {
//I also want this function to trigger the event!
}
}
echo A::b();
?>
最佳答案
据我所知,没有针对此的本地语言结构。如果您出于调试目的需要它,我建议您更深入地研究 xdebug 扩展,尤其是 function traces (太棒了!:)
另一个想法是实现 __call()
在您的类(class)中并包装所有公共(public)方法。但这需要更改代码并有其他副作用:
(简化示例)
class Test {
protected $listeners;
public function __construct() {
$this->listeners = array();
}
private function a() {
echo 'something';
}
private function b() {
echo 'something else';
}
public function __call($fname, $args) {
call_user_func_array(array($this, $fname), $args);
foreach($this->listeners as $listener) {
$listener->notify('fname was called');
}
}
public function addListener(Listener $listener) {
$this->listeners[]= $listener;
}
}
.
class Listener {
public function notify($message) {
echo $message;
}
}
例子:
$t = new Test();
$l = new Listener();
$t->addListener($l);
$t->a();
关于php - 在类中调用函数时触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16922277/