如何使用变量名称来调用类?

时间:2016-01-28 10:21:07

标签: php laravel

我想使用变量(字符串值)来调用Class。我可以做吗 ?我搜索PHP ReflectionClass但我不知道如何使用Reflection Result中的方法。像这样:

    foreach($menuTypes as $key => $type){
        if($key != 'Link'){
            $class = new \ReflectionClass('\App\Models\\' . $key);

            //Now $class is a ReflectionClass Object
            //Example: $key now is "Product"
            //I'm fail here and cannot call the method get() of 
            //the class Product

            $data[strtolower($key) . '._items'] = $class->get();
        }
    }

4 个答案:

答案 0 :(得分:3)

没有ReflectionClass:

$instance = new $className();

使用ReflectionClass:使用ReflectionClass::newInstance() method

$instance = (new \ReflectionClass($className))->newInstance();

答案 1 :(得分:3)

我发现了一个这样的

$str = "ClassName";
$class = $str;
$object = new $class();

答案 2 :(得分:2)

您可以直接使用,如下所示

$class = new $key();

$data[strtolower($key) . '._items'] = $class->get();

答案 3 :(得分:0)

风险是该类不存在。因此最好在实例化之前进行检查。

使用php的class_exists方法

Php有一个内置方法来检查类是否存在。

$className = 'Foo';
if (!class_exists($className)) {
    throw new Exception('Class does not exist');
}

$foo = new $className;

使用带有rethrow的try / catch

如果出现问题,一个很好的方法就是尝试并捕捉它。

$className = 'Foo';

try {
    $foo = new $className;
}
catch (Exception $e) {
    throw new MyClassNotFoundException($e);
}

$foo->bar();