创建类名为字符串的类时未找到类

Vah*_*iri 9 php fatal-error laravel

我需要根据传递给函数的参数创建类.我是这样做的:

public function index($source)
    {
        if(in_array($source, ModuleManager::getAllModules()))
        {
            $provider = new $source();
            if($image)
            {
                return $provider->getAll(true);
            }
            else
            {
                return $provider->getAll(false);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

请注意,在第5行,我正在尝试创建一个$source肯定可用的类对象.据我所知,上面的代码实际上是一个eval调用.我正在使用Laravel 5.2,上面的代码返回:

FatalThrowableError in ProcReqController.php line 19:
Fatal error: Class 'Example' not found
Run Code Online (Sandbox Code Playgroud)

在上面的错误Example可以是我做的任何类.现在如果我硬编码$source那么它的值就可以了.

我得到的错误是什么?

use*_*496 9

我相信当你试图实例化一个类名在变量中并且与导入有关的类时,PHP会发生混乱.

解决方案1

将您的$class变量设置为包含命名空间的完全限定类名,它应该可以工作.

这样,new $class()即使包括括号也应该工作.

解决方案2

在进一步测试之后,似乎在实例化变量类时,它总是假设全局命名空间.

考虑到这一点,您可以使用class_alias别名来对每个类进行别名.在config/app.php,您可以将每个类添加到aliases数组中.

'aliases' => [
    ....

    'Example' => App\Example::class
]
Run Code Online (Sandbox Code Playgroud)