Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建类名为字符串的类时找不到类_Php_Laravel_Fatal Error - Fatal编程技术网

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

Php 创建类名为字符串的类时找不到类,php,laravel,fatal-error,Php,Laravel,Fatal Error,我需要根据传递给函数的参数创建类。我是这样做的: public function index($source) { if(in_array($source, ModuleManager::getAllModules())) { $provider = new $source(); if($image) { return $provider->get

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

public function index($source)
    {
        if(in_array($source, ModuleManager::getAllModules()))
        {
            $provider = new $source();
            if($image)
            {
                return $provider->getAll(true);
            }
            else
            {
                return $provider->getAll(false);
            }
        }
    }
请注意,在第5行,我试图创建一个类为
$source
的对象,它肯定是可用的。我知道上述代码实际上是一个
eval
调用。我使用的是Laravel 5.2,上面的代码返回:

FatalThrowableError in ProcReqController.php line 19:
Fatal error: Class 'Example' not found
在上面的错误
示例中
可以是我创建的任何类。现在,如果我硬编码
$source
的值,那么它就可以正常工作了


我得到的错误是什么?

我想,删除实例化调用末尾的括号

查看此php交互式shell会话:

php > class Foo { };
php > $fooname = 'Foo';
php > $bar = new $fooname;
php > var_dump($bar);
object(Foo)#2 (0) {
}

src:

我相信,当您试图实例化类名在变量中且与导入有关的类时,PHP会感到困惑

解决方案1 将
$class
变量设置为完全限定的类名,包括名称空间,它应该可以工作

这样,
new$class()
即使在包含括号的情况下也应该可以工作

解决方案2 在进一步测试之后,当您实例化一个变量类时,它似乎总是采用全局名称空间

记住这一点,您可以使用
class\u alias
为每个类添加别名。在
config/app.php
中,可以将每个类添加到
别名
数组中

'aliases' => [
    ....

    'Example' => App\Example::class
]

自动加载程序允许您在不完全限定类的情况下使用类。。。在php交互式shell中,您必须手动包含类并完全限定它们

如果您有composer项目,请转到其目录并执行以下操作以加载原始颜色类:


示例
是否有名称空间?删除括号没有帮助。

    set_include_path(getcwd().'/vendor/primal/color/lib/Primal/Color/');
    include 'Color.php';
    include 'Parser.php';
    include 'RGBColor.php';
    include 'HSVColor.php';
    $hello = Primal\Color\Parser::parse('#666');
    var_export($hello->toHSV());

/*
returns
Primal\Color\HSVColor::__set_state(array(
   'hue' => 0,
   'saturation' => 0,
   'value' => 37.647058823529413,
   'alpha' => 1,
))
*/