【问题标题】:Check what method has been called in a PHP class检查在 PHP 类中调用了什么方法
【发布时间】:2016-10-11 11:25:23
【问题描述】:

我需要知道在 PHP 类中调用了哪个方法,并在可能的情况下在同一个类中处理它。

示例

class Pages
{

    public function firstPage()
    {
        return 'First Page';
    }

    public function secondPage()
    {
        return 'Second Page';
    }

    public function thirdPage($details)
    {
        return view('ThirdPage')->with('details', $details);
    }

    //This will handle everything that happening.
    public function handler($methodExecuted)
    {
        // $methodExecuted will hold what method was accessed.
        echo 'Page ' . $methodExecuted . ' Was accessed';
    }

}

与此类似,我不确定 PHP 是否可以使用此功能,“处理程序”方法只会将数据存储到真实应用程序中的数据库中,但这里只是回显一些数据。

PHP 是否有一种神奇的方法或任何可以实现此目的的方法?到目前为止,我遇到的唯一事情是 __call 方法,但这并不完全符合 id 的要求,尽管它有点在线。

【问题讨论】:

  • 最大的问题是你为什么要这样做,知道调用哪种方法的最终目标是什么。实际上,您应该已经知道调用了哪个方法,因为是您编写了代码。因此,如果您能详细说明您想要完成的工作,而不仅仅是您认为解决问题的方法,我们或许可以为您提供更好的帮助。
  • @ChristianF 我需要知道返回的是哪个页面,以便我可以将其动态添加到日志中,作为在每个方法中为新日志编写代码的替代方法,我有 50 多个方法和一遍又一遍地编写代码似乎有点乏味,就像大多数编程语言一样,当你开始重复自己时,语言有一些东西可以最大限度地减少重复过程。显然 PHP 在这种特定情况下无论如何都不会。
  • 语言没有减少重复的方法。程序员会。如果您需要添加日志记录,您应该使用与控制器逻辑分离的单独服务。当然,您有某种解析器,它知道要调用哪个Page 对象和哪个page() 方法。这个解析器是您应该记录这些信息的地方。
  • @MadDog 我的意思是说简单的例子,而不是一遍又一遍地使用 if 语句,你会使用 switch 语句,我只是举一个简单的例子,无论如何感谢输入。

标签: php class methods magic-methods


【解决方案1】:

不,PHP 中没有在每个方法调用之前调用的神奇方法。您必须从每个方法中手动调用此方法。

【讨论】:

  • 我很害怕这个,所以我有 50 多页,这是否被认为是为每个返回页面的单个方法编写新代码行的好习惯?
  • 或者重写代码使用__call方法。或者从调用其他方法的同一位置调用 handler 方法。 @ChristianF 在对您的问题的评论中提出了一个非常好的问题,您应该问自己这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
相关资源
最近更新 更多