素材牛VIP会员
PHP如何实现类的公共后置方法?
 23***om  分类:PHP代码  人气:835  回帖:2  发布于6年前 收藏

目的是这样的,希望实例化一个对象后不管调用对象的任何方法,之后都会执行一些命令(例如写入日志之类的)。

我的想法这样的,类的所有方法都是私有方法,那么实例对象后调用方法都用__call()这个魔术方法来做。

class Algorithm{
    private $object;

    private function write($a,$b){
        return $a+$b;
    }

    public function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
        call_user_func_array($this->$name,$arguments);
        //call_user_func_array(['Algorithm',$name],$arguments);
        return $this;
    }
}

代码如上,但是这里出现了一个问题call_user_func_array()这个函数在这种情况下,没法调用Algorithm的方法,到这里就没办法继续下去了。

求高手指教~~

 标签:php

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv4 码徒
be***ai JS工程师 6年前#1

好吧,自己解决了。call_user_funs_array的第一个参数数组的第一个元素应该写this

Lv6 码匠
15***57 UI设计师 6年前#2

这种方法有点取巧吧?相当与public,private什么的都不起作用了,破坏性太严重了吧?还不如老老实实每个方法都添加逻辑呢呢。
如果仅仅是纪录写入、更新日志的话,应该在框架中增加写入或更新数据时的钩子事件什么的,执行写入或更新后自动执行afterSave()类似的方法来写入日志比较好点吧。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取