开发者社区> 问答> 正文

请教php中如何实现对一个已定义的类的方法调用的事件监听 ?

class a{
    function mycall($var){
        return 'hello:'.$var;
    }
}

//invoke
$aobj = new a();
echo $aobj->mycall('abc');

想实现不修改现有调用流程代码的情况下,实现,对已定义类方法(这里是'mycall')的事件监听 比如拦截和修改mycall的返回。

我知道可以通过包装类的类似的方法来解决问题,但如果不想修改现有调用流程,仅仅在这些类定义之前或之后添加代码来解决问题呢? 补充一下,系统环境还是5.3的,所以traits就暂时用不了了,有没有什么变通的办法?

展开
收起
落地花开啦 2016-06-14 15:43:22 2514 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    这样试一下

    trait T {
        private function mycall($var){
            return 'hello:'.str_pad($var, 4, '__', STR_PAD_LEFT);
        }
    }
    
    //invoke
    class  A{
        use T {
            mycall as traitmycall;
        }
    
        public function mycall($val)
        {
            return $this->traitmycall($val);
        }
    }
    
    $obj = new A();
    echo $obj->mycall('abc');
    2019-07-17 19:37:55
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载