php - 在类中调用函数时触发事件

标签 php class function events

在 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/

相关文章:

php - JavaScript 检查新内容,例如通知

php - 集合归约递归算法

php - 使用 index.php 和不使用它绕过 url 的 htpasswd 身份验证

C++:从(不是)类实例获取类型

python - 如何使用实例激活 __str__ dunder 方法并修复错误 :"__str__ returned non-string (type NoneType)"

php - PDO 准备状态未给出与手动查询相同的结果

java - Java 中的参数化类型不匹配

python - TypeError : NoneType, 相等则可以比较,大于则报错

php - __construct 和与类同名的函数有什么区别?

ios - Return 函数内部为 Void