]> granicus.if.org Git - php/commitdiff
Add test to ensure ReflectionClass works correctly with traits
authorNikita Popov <nikic@php.net>
Thu, 12 Feb 2015 22:25:09 +0000 (23:25 +0100)
committerNikita Popov <nikic@php.net>
Thu, 12 Feb 2015 22:25:09 +0000 (23:25 +0100)
Some of these were not working correctly before Guilherme's patch.
Another was broken by it and is fixed in this commit as well.

ext/reflection/php_reflection.c
ext/reflection/reflectionclass_for_traits.phpt [new file with mode: 0644]

index 309b10c1bb17125445bd66181b43de1551a2651d..1f16c4da78b0c3cad8740b53977b166c4641967f 100644 (file)
@@ -4084,7 +4084,7 @@ ZEND_METHOD(reflection_class, isInstantiable)
                return;
        }
        GET_REFLECTION_OBJECT_PTR(ce);
-       if (ce->ce_flags & (ZEND_ACC_INTERFACE | ZEND_ACC_EXPLICIT_ABSTRACT_CLASS | ZEND_ACC_IMPLICIT_ABSTRACT_CLASS)) {
+       if (ce->ce_flags & (ZEND_ACC_INTERFACE | ZEND_ACC_TRAIT | ZEND_ACC_EXPLICIT_ABSTRACT_CLASS | ZEND_ACC_IMPLICIT_ABSTRACT_CLASS)) {
                RETURN_FALSE;
        }
 
diff --git a/ext/reflection/reflectionclass_for_traits.phpt b/ext/reflection/reflectionclass_for_traits.phpt
new file mode 100644 (file)
index 0000000..526310a
--- /dev/null
@@ -0,0 +1,20 @@
+--TEST--
+Tests some parts of ReflectionClass behavior for traits
+--FILE--
+<?php
+
+trait T {}
+
+$r = new ReflectionClass('T');
+var_dump(Reflection::getModifierNames($r->getModifiers()));
+var_dump($r->isAbstract());
+var_dump($r->isInstantiable());
+var_dump($r->isCloneable());
+
+?>
+--EXPECT--
+array(0) {
+}
+bool(false)
+bool(false)
+bool(false)