Laravel 5从字符串生成动态对象

时间:2015-07-13 08:00:33

标签: php laravel namespaces laravel-5

我有以下目录结构(仅显示重要文件):

app/
 - Http/                        
   - Controllers/
     - MyController.php         // namespace App\Http\Controllers
 - Utils/
   - InternalUtils/
     - Utility1.php             // namespace App\Utils\InternalUtils
     - Utility2.php             // namespace App\Utils\InternalUtils
     - ...
   - MyUtility.php             // namespace App\Utils

我遵循Laravel 5中提供的标准PSR-4命名空间。

MyUtility.php文件中,我尝试使用以下内容:

use InternalUtils\Utility1;
use InternalUtils\Utility2;
(new Utility1);   // works
$className = 'Utility1';
(new $className);   // throws Class 'Utility1' not found

请注意,每个Utility文件都是命名空间,并包含一个与Utility1同名的类名。

动态生成对象失败。 关于可能出现什么问题的任何想法?

1 个答案:

答案 0 :(得分:1)

请按以下方式进行操作

在Utility1.php中

<?php 

namespace App\Utils\InternalUtils;

Class Utility1 
{
    //code ....
}

为了在MyUtility类中使用Utility1类,您可以导入完整命名空间

<?php 

namespace App\Utils;

use App\Utils\InternalUtils;   

class MyUtility 
{
    //other code 

    $utility1 = new InternalUtils\Utility1();
    $utility2 = new InternalUtils\Utility2();
}