【问题标题】:PHP Methods that are always called总是被调用的 PHP 方法
【发布时间】:2011-05-31 04:33:44
【问题描述】:

我目前正在开发自己的 PHP-MVC 框架(仅供体验)。

我的问题:是否可以在每次类方法时调用已定义的函数或方法 被调用了吗?

例如:

public function view($id) {
     //Code ...
     $this->view->render(__FUNCTION__);
}

我想要的是:

public function view($id) {
    //Code ...
    //render-method is called automatically with functionname as parameter
}

我尝试了不同的方法......但没有成功。 如果有人能帮我解决这个问题,那就太好了。

干杯, 克里斯

【问题讨论】:

  • +1 表示“仅供体验”,这样我们就可以避免阅读所有那些“不要重新发明轮子”的回复。
  • 顺便说一句,你的基/前端控制器类应该调用渲染方法。

标签: php oop methods call


【解决方案1】:

您可以使用Magic Methods 来实现此行为:

public function __call($func, $args) {
  if(!method_exists($this, $func)) {
    return;
  }

  // do some coding here
  call_user_func_array($func,$args);
  // do some coding there
}

private function view($arg1, $arg2) {
  // and here
}

记住:视图函数必须是私有的/受保护的。

$obj->view("asdasd", "asdsad");

应该做 ::__call(),然后是 ::view() 方法

【讨论】:

  • 魔术函数__call 仅在未定义特定函数时调用。在上面的例子中,如果你调用 view __call 不会被调用。但是如果你打电话给view1。如果函数是private,你就会得到错误Fatal error: Call to private method...,不是吗?
【解决方案2】:

您可以使用包装方法。调用此方法并将其他所有内容作为参数传递。

【讨论】:

    【解决方案3】:

    您可以使用 PHP 将变量值用于执行目的的能力来创建一个函数作为联络点。例如:

    function call($func,$param)
    {
        $this->$func($param);
        $this->render($func);
    }
    
    $myObj->call('view',$id);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多