【问题标题】:php - Execute snippet on method callphp - 在方法调用上执行片段
【发布时间】:2012-03-16 12:56:55
【问题描述】:

我想知道每次在类中调用方法时是否有一种方法可以在 PHP 中执行 sn-p。类似于 __construct() 的工作方式,但应该在每个方法调用时调用它。

【问题讨论】:

  • 为什么?如果需要的话,这听起来像是糟糕的设计。

标签: php methods call invoke code-snippets


【解决方案1】:

您可能正在寻找__call()。每当调用不可访问的方法时,都会调用它。

class MyClass {
  protected function doStuff() {
    echo "doing stuff.";
  }

  public function __call($methodName, $params) {
    echo "In before method.";
    return $this->doStuff();
  }
}

$class = new MyClass();
$class->doStuff(); // In before method.doing stuff.

【讨论】:

  • 问题是我希望在现有方法上调用这个函数
  • 如果方法调用在 PHP 中已经可以访问,则不能拦截它。有很多设计模式和技术使这成为可能和可管理的,但这一切都始于以某种方式使方法无法访问。您可以使用$myClass->callMethod('methodName', array('args')) 之类的方法,但这似乎是一个非常糟糕的解决方案
  • 不错。所以我会让我的方法无法访问(我会找到最好的方法。我有 2-3 种不同的方法)并且我会使用 call.好的。非常感谢:-)
【解决方案2】:

我可以建议您使用面向方面的库来满足您的需求。您将能够为方法(正则表达式)创建一个切入点,并且只需提出一个建议(闭包)以在每个方法之前/之后或周围调用。 你可以看看我的图书馆:Go! AOP PHP

【讨论】:

    最近更新 更多