对象数组的内爆

Implode of array of Objects

我有一个简单的(我认为)。

我有一个 Silex 应用程序...我创建了一个服务 services.yml 文件,其中包含我的服务及其参数。当然,参数可以是另一个 classes:

的实例
services:
   Service:
      class: App\Services\xxxxxService
      arguments:
         - App\Lib\Parser\JsonParser
         - xxxxxx

所以,在我的初始化应用程序中,我有这段代码:

$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);
    }

此代码给出错误:

可捕获的致命错误:class App\Lib\Parser\JsonParser 的对象无法转换为第 252 行 /app/src/Application.php 中的字符串

我的目标是拥有 $this[$name] = new $className($this, $args[0], $args[1] ....) ,但我不能使用内爆函数。

有什么想法吗???

提前致谢!!

男.

我建议使用 ReflectionClass 实例化您的 $className

收集完所有 $args 后,请勿使用 implode 方法,因为它无法将参数正确传递给 class 构造函数。

所以你有 $args 作为 array

array_unshift($args, $this); # Prepend $this in args
$refl = new ReflectionClass($className);
$this[$name] = $refl->newInstanceArgs($args); #Instatiate $className with appropriate args.