加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何创建一个每次调用公共方法时调用的方法?

发布时间:2020-12-13 16:17:09 所属栏目:PHP教程 来源:网络整理
导读:如何创建一个每次调用公共方法时调用的方法?你也可以说这是一个post-method-call-hook. 我目前的代码: ?phpclass Name { public function foo() { echo "Foo calledn"; } public function bar() { echo "Bar calledn"; } protected function baz() { ech
如何创建一个每次调用公共方法时调用的方法?你也可以说这是一个post-method-call-hook.

我目前的代码:

<?php
class Name {
   public function foo() {
      echo "Foo calledn";
   }

   public function bar() {
      echo "Bar calledn";
   }

   protected function baz() {
      echo "Baz calledn";
   }
}

$name = new Name();
$name->foo();
$name->bar();

此代码中的当前输出将是:

Foo called
Bar called

我想每次调用另一个公共方法时调用baz()方法.例如.

Baz called
Foo called
Baz called
Bar called

我知道我可以这样做:

public function foo() {
    $this->baz();
    echo "Foo calledn";
}

但这并不能真正解决我的问题,因为那不是真正的正交,如果我有100个方法需要在它们之前调用另一个方法,那么实现起来相对痛苦.

解决方法

可能不是你期望或想要的完全,但通过使用魔术方法__call并标记受保护或私有的公共方法,您可以获得所需的效果:

<?php
class Name {
    public function __call($method,$params) {
        if(!in_array($method,array('foo','bar')))
            return;
        $this->baz();
        return call_user_func_array(
                    array($this,$method),$params);
    }

   protected function foo() {
      echo "Foo calledn";
   }

   protected function bar() {
      echo "Bar calledn";
   }

   protected function baz() {
      echo "Baz calledn";
   }
}

$name = new Name();
$name->foo();
$name->bar();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读