0
我有一个容易的(我认为)。对象阵列的内爆
我有一个Silex应用程序...我创建了一个服务services.yml文件,我的服务与他们的参数。 coruse的,参数可以是另一个类的实例:
services:
Service:
class: App\Services\xxxxxService
arguments:
- App\Lib\Parser\JsonParser
- xxxxxx
所以,在我的init程序,我有这样的一段代码:
$services = $this['config']['services'];
foreach ($services as $name => $service) {
$className = $service['class'];
$args = array_map(function ($arg) {
if(class_exists($arg)){
return new $arg;
} else {
return $arg;
}
}, $service['arguments']);
$args = implode(',', $args);
$this[$name] = new $className($this, $args);
}
此代码给我的错误:
可捕捉致命错误:类App \ Lib \ Parser \ JsonParser的对象无法转换为线252上的/app/src/Application.php中的字符串
我的目标是让$ this [$ name] = new $类名($日是,$ args [0],$ args [1] ....),但我不能使用implode函数。
任何想法???
预先感谢您!
M.
YESSS! ...反思能够做到这一点! +1你! 您是否认为Reflection在内存使用方面过于昂贵? 查看我的代码,你认为我是对的吗? ....我有一个Silex \ Application的应用程序包装器,在运行之前,我将所有控制器,参数和服务启动到$ app中,这是Pimple的一个实例。 因此,在我的应用程序现在我有$ app ['myService'],我可以在任何地方重新使用。 – Mauro
您正在尝试构建一个DependencyInjection工具。虽然有很多,但建立你自己并不差,因为你可以在这个过程中学到很多东西。为了提高性能,如果您认为速度较慢,最好对应用程序进行基准测试并进行性能分析。在分析中你可以看到瓶颈在哪里。 ReflectionClass也是从Symfony DI中使用的,我认为这是php中用于从args创建类实例的唯一wawy。 – Whiteulver