Procházet zdrojové kódy

[DependencyInjection] removed injection for protected and private properties

Fabien Potencier před 14 roky
rodič
revize
c3bb214e94

+ 1 - 10
src/Symfony/Component/DependencyInjection/ContainerBuilder.php

@@ -699,17 +699,8 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
         }
 
         $properties = $this->resolveServices($this->getParameterBag()->resolveValue($definition->getProperties()));
-        $outsideClass = new \ReflectionClass($service);
         foreach ($properties as $name => $value) {
-            $class = $outsideClass;
-            do {
-                if ($class->hasProperty($name)) {
-                    $property = $class->getProperty($name);
-                    $property->setAccessible(true);
-                    $property->setValue($service, $value);
-                    continue 2;
-                }
-            } while (false !== $class = $class->getParentClass());
+            $service->$name = $value;
         }
 
         if ($callable = $definition->getConfigurator()) {

+ 1 - 3
src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php

@@ -374,9 +374,7 @@ class PhpDumper extends Dumper
     {
         $code = '';
         foreach ($definition->getProperties() as $name => $value) {
-            $code .= sprintf("        \$%s = new \ReflectionProperty(\$%s, %s);\n", $refName = $this->getNextVariableName(), $variableName, var_export($name, true));
-            $code .= sprintf("        \$%s->setAccessible(true);\n", $refName);
-            $code .= sprintf("        \$%s->setValue(\$%s, %s);\n", $refName, $variableName, $this->dumpValue($value));
+            $code .= sprintf("        \$%s->%s = %s;\n", $variableName, $name, $this->dumpValue($value));
         }
 
         return $code;

+ 1 - 1
tests/Symfony/Tests/Component/DependencyInjection/Fixtures/includes/foo.php

@@ -2,7 +2,7 @@
 
 class FooClass
 {
-    private $foo, $moo;
+    public $foo, $moo;
 
     public $bar = null, $initialized = false, $configured = false, $called = false, $arguments = array();
 

+ 2 - 6
tests/Symfony/Tests/Component/DependencyInjection/Fixtures/php/services9.php

@@ -66,12 +66,8 @@ class ProjectServiceContainer extends Container
 
         $instance->setBar($this->get('bar'));
         $instance->initialize();
-        $b = new \ReflectionProperty($instance, 'foo');
-        $b->setAccessible(true);
-        $b->setValue($instance, 'bar');
-        $c = new \ReflectionProperty($instance, 'moo');
-        $c->setAccessible(true);
-        $c->setValue($instance, $a);
+        $instance->foo = 'bar';
+        $instance->moo = $a;
         sc_configure($instance);
 
         return $instance;