8000 Don't use reflections when possible · symfony/symfony@35be501 · GitHub
[go: up one dir, main page]

Skip to content

Commit 35be501

Browse files
committed
Don't use reflections when possible
1 parent aab2783 commit 35be501

File tree

5 files changed

+12
-15
lines changed

5 files changed

+12
-15
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/FragmentRendererPass.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,8 @@ public function process(ContainerBuilder $container)
3737
// We must assume that the class value has been correctly filled, even if the service is created by a factory
3838
$class = $container->getDefinition($id)->getClass();
3939

40-
$refClass = new \ReflectionClass($class);
4140
$interface = 'Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface';
42-
if (!$refClass->implementsInterface($interface)) {
41+
if (!is_subclass_of($class, $interface)) {
4342
throw new \InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, $interface));
4443
}
4544

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/LoggingTranslatorPass.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ public function process(ContainerBuilder $container)
3636
$definition = $container->getDefinition((string) $translatorAlias);
3737
$class = $container->getParameterBag()->resolveValue($definition->getClass());
3838

39-
$refClass = new \ReflectionClass($class);
40-
if ($refClass->implementsInterface('Symfony\Component\Translation\TranslatorInterface') && $refClass->implementsInterface('Symfony\Component\Translation\TranslatorBagInterface')) {
39+
if (is_subclass_of($class, 'Symfony\Component\Translation\TranslatorInterface') && is_subclass_of($class, 'Symfony\Component\Translation\TranslatorBagInterface')) {
4140
$container->getDefinition('translator.logging')->setDecoratedService('translator');
4241
$container->getDefinition('translation.warmer')->replaceArgument(0, new Reference('translator.logging.inner'));
4342
}

src/Symfony/Component/Debug/DebugClassLoader.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,16 +193,16 @@ public function loadClass($class)
193193
break;
194194
}
195195
}
196-
$parent = $refl->getParentClass();
196+
$parent = get_parent_class($class);
197197

198-
if (!$parent || strncmp($ns, $parent->name, $len)) {
199-
if ($parent && isset(self::$deprecated[$parent->name]) && strncmp($ns, $parent->name, $len)) {
200-
@trigger_error(sprintf('The %s class extends %s that is deprecated %s', $name, $parent->name, self::$deprecated[$parent->name]), E_USER_DEPRECATED);
198+
if (!$parent || strncmp($ns, $parent, $len)) {
199+
if ($parent && isset(self::$deprecated[$parent]) && strncmp($ns, $parent, $len)) {
200+
@trigger_error(sprintf('The %s class extends %s that is deprecated %s', $name, $parent, self::$deprecated[$parent]), E_USER_DEPRECATED);
201201
}
202202

203-
foreach ($refl->getInterfaceNames() as $interface) {
204-
if (isset(self::$deprecated[$interface]) && strncmp($ns, $interface, $len) && !($parent && $parent->implementsInterface($interface))) {
205-
@trigger_error(sprintf('The %s %s %s that is deprecated %s', $name, $refl->isInterface() ? 'interface extends' : 'class implements', $interface, self::$deprecated[$interface]), E_USER_DEPRECATED);
203+
foreach (class_implements($class) as $interface) {
204+
if (isset(self::$deprecated[$interface]) && strncmp($ns, $interface, $len) && !is_subclass_of($parent, $interface)) {
205+
@trigger_error(sprintf('The %s %s %s that is deprecated %s', $name, interface_exists($class) ? 'interface extends' : 'class implements', $interface, self::$deprecated[$interface]), E_USER_DEPRECATED);
206206
}
207207
}
208208
}

src/Symfony/Component/EventDispatcher/DependencyInjection/RegisterListenersPass.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,8 @@ public function process(ContainerBuilder $container)
9898
// We must assume that the class value has been correctly filled, even if the service is created by a factory
9999
$class = $container->getParameterBag()->resolveValue($def->getClass());
100100

101-
$refClass = new \ReflectionClass($class);
102101
$interface = 'Symfony\Component\EventDispatcher\EventSubscriberInterface';
103-
if (!$refClass->implementsInterface($interface)) {
102+
if (!is_subclass_of($class, $interface) AD14 )) {
104103
throw new \InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, $interface));
105104
}
106105

src/Symfony/Component/HttpKernel/DependencyInjection/FragmentRendererPass.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ public function process(ContainerBuilder $container)
5252
throw new \InvalidArgumentException(sprintf('The service "%s" must not be abstract as fragment renderer are lazy-loaded.', $id));
5353
}
5454

55-
$refClass = new \ReflectionClass($container->getParameterBag()->resolveValue($def->getClass()));
55+
$class = $container->getParameterBag()->resolveValue($def->getClass());
5656
$interface = 'Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface';
57-
if (!$refClass->implementsInterface($interface)) {
57+
if (!is_subclass_of($class, $interface)) {
5858
throw new \InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, $interface));
5959
}
6060

0 commit comments

Comments
 (0)
0