对象数组的内爆
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.
我有一个简单的(我认为)。
我有一个 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.