Mvc方法名称必须是字符串

时间:2013-05-02 14:11:34

标签: php

我有问题,我不知道如何解决这个问题。

此行代码出现问题:

   public function ExecuteAction() {
        return $this->{$this->action}();
    }

所有其他工作精细控制器成功加载但我有致命的错误。

  

致命错误:方法名称必须是字符串   第27行的D:\ xampp \ htdocs \ Workplace \ MVC \ lib \ BaseController.php

检查我的代码:

的index.php

$fController = new FController($_GET);
$controller = $fController->CreateController();
$controller->ExecuteAction();

Fcontorler

   public function createController() 
   {
        if(class_exists($this->controller)) {
            $parent = class_parents($this->controller);
            if(in_array('BaseController', $parent)) {
                if(method_exists($this->controller, $this->action)) {
                    return new $this->controller($this->action, $this->url);
                }else {
                    echo "Method no exists";
                }
            }else {
                echo "Bad Controller";
            }
        } else {
            echo "Controller ". $this->controller . " class no exists";
        }
   }

BaseController

abstract class BaseController {

    protected $urlvalues;
    protected $action;

    /*
     * Construct
     * 
     * @param string  $action
     * @param array   $url
     * 
     */

    public function __construct($action, $urlvalues) {
        $this->action = $action;
        $this->urlvalues = $urlvalues;
    }

    /*
     * Execute acction
     * 
     */

    public function ExecuteAction() {
        return $this->{$this->action}();
    }
  

本地主机/工作场所/ MVC / index.php的控制器=你好&安培;行动=说和ID = 5

1 个答案:

答案 0 :(得分:0)

  

的var_dump($控制器); object(Hello)#2(2){[“urlvalues”:protected] => NULL [“action”:protected] => NULL}

由于您在解释器期待字符串时尝试使用NULL,因此会触发错误。

正如您的var_dump所示,$this->actionNULL因此字符串插值$this->{$this->action}();会被转换为无法调用的$this->{NULL}();