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();
?>

最佳答案

AFAIK 没有针对此的本地语言结构。如果您出于调试目的需要它,我建议您深入了解 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/

相关文章:

c++ - 当函数调用退出并且函数在堆中生成类实例时是否调用析构函数?

python - 如何在 Python 中混合多个参数和可选参数?

php - WooCommerce 检查订单是否已支付/处理或完成

php - Symfony2 JSON 示例

php - 学说迁移 : How to avoid SQL errors in the postUp step?

php - 如何在laravel中创建子域

ios - 无法访问类对象变量

java - 对象被视为未初始化的变量

r - 使用 R 优化/矢量化数据库查询

r - 在 R 中创建一个函数