php - 在 PHP 中我的类的任何方法之前调用特殊方法

标签 php oop magic-methods

是否有一个特殊的方法,当我调用任何类的方法时,它都会被调用?

下面有一个示例可以解释我的问题:

class Foo{
   public function bar(){
      echo 'foo::bar';
   }

   public function before(){
      echo 'before any methods';
   }

   public function after(){
      echo 'after any methods';
   }
}

$foo = new Foo;
$foo->bar();

输出应该是:

 /*
    Output:
    before any methods
    foo::bar
    after any methods
*/

最佳答案

我个人不喜欢这个解决方案,但你可以使用神奇的方法__call:

/**
 * @method bar
 */
class Foo{

    public function __call($name, $arguments)
    {
        $myfunc = '_'.$name;
        $this->before();
        if (method_exists($this,$myfunc)) {
            $this->$myfunc();
        }
        $this->after();
    }

    public function _bar(){
        echo 'foo::bar';
    }

    public function before(){
        echo 'before any methods';
    }

    public function after(){
        echo 'after any methods';
    }
}

$foo = new Foo;
$foo->bar();

关于php - 在 PHP 中我的类的任何方法之前调用特殊方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23447430/

相关文章:

php - 如何访问有空格的变量?

PHP $_SESSION 返回错误值

PHP fopen 和file_get_contents 限制了下载速度,为什么?

php - 为什么公共(public)函数可以通过静态调用来访问 - PHP?

python - scikit-learn 类实例上的 Monkey-Patching 魔法方法

php - __isset 未返回正确的结果

php - 内爆特定的关联数组键值

Java = Return Object list/array vs. Result-Object(与方法参数相同)

python - 使用自定义混合类型创建枚举

python - __str__和__repr__之间的区别?