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,
))
*/