从变量名实例化类不起作用

时间:2016-03-07 18:56:54

标签: php

$controller = 'DefaultController';
require('app/controllers/'.$controller.'.php');
$object = new $controller;

这在new $controller失败了,但在require失败了..我真的没有想法

  

致命错误:第31行的C:\ wamp \ www \ controller \ index.php中找不到类'DefaultController'

app/controllers/DefaultController.php

<?php
namespace App\Controllers;

/**
* DefaultController
*/
class DefaultController
{

    public function __construct()
    {
        # code...
    }

    public function index() {

    }
}

编辑:我添加了命名空间,结果仍然相同

$controller = 'DefaultController';
require('app/controllers/'.$controller.'.php');
$controller = 'App\Controller\\'.$controller;
$object = new $controller;

Fatal error: Class 'App\Controller\DefaultController' not found in C:\wamp\www\controller\index.php on line 33

编辑2:啊是的..它的控制器不是控制器

3 个答案:

答案 0 :(得分:3)

因为您使用了错误的命名空间。

尝试

$controller = 'App\Controllers\DefaultController';

答案 1 :(得分:2)

您的班级名称为App\Controllers\DefaultController,而不是DefaultController

require 'app/controllers/DefaultController.php';
$controller = 'App\Controllers\DefaultController';
$object = new $controller;

如何使用自动加载器/ require语句来解决这个问题取决于你。

答案 2 :(得分:0)

如果您使用命名空间,则在使用 new 创建实例之前,必须先将命名空间前缀添加到类名。

您的类存在于命名空间内,其名称带有命名空间名称。