나는 쉬운 것을 가지고있다 (나는 생각한다).객체 배열의 Implode
나는 Silex 응용 프로그램을 가지고 있습니다 ... 나는 그들의 서비스와 함께 services.yml 파일을 만들었습니다.
:
$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);
}
이 코드는 나에게 오류를 제공합니다
services:
Service:
class: App\Services\xxxxxService
arguments:
- App\Lib\Parser\JsonParser
- xxxxxx
그래서, 내 초기화 응용 프로그램에서, 나는이 코드 조각이 : coruse 중 인수는 다른 클래스의 인스턴스가 될 수 있습니다 잡을 수있는 치명적인 오류 : App \ Lib \ Parser \ JsonParser 클래스의 객체를 252 행의 /app/src/Application.php에서 문자열로 변환 할 수 없습니다.
내 목표는 $ this [$ name] = new $ className ($ th $ args [0], $ args [1] ....),하지만 함몰 함수를 사용할 수 없습니다.
어떤 아이디어 ???
미리 감사드립니다.
M.
YESSS 있습니다! ... 반사가 트릭을! 너 +1해라! Reflection이 메모리 사용량 측면에서 너무 비싸다고 생각합니까? 내 코드를 보면, 내가이 일을 제대로 수행하고 있다고 생각합니까? .... 나는 Silex \ Application의 응용 프로그램 래퍼를 가지고 있으며 이것을 실행하기 전에 모든 제어기, 매개 변수 및 서비스를 $ app에 시작합니다. 즉, Pimple의 인스턴스입니다. 내 응용 프로그램에서 이제 $ app [ 'myService']가 있고 어디서나 재사용 할 수 있습니다. – Mauro
DependencyInjection 도구를 작성하려고합니다. 비록 많은 것들이 있지만, 당신이 그 과정에서 많은 것들을 배울 수 있기 때문에 자신 만의 것을 만드는 것이 나쁘지 않습니다. 성능면에서는 느린 경우 응용 프로그램을 벤치마킹 한 다음 프로파일 링하는 것이 더 좋습니다. 프로파일 링에서 병목 현상이 어디 있는지 확인할 수 있습니다. ReflectionClass는 또한 Symfony DI에서 사용되며, args에서 클래스 인스턴스를 만드는 유일한 wawy라고 생각합니다. – Whiteulver