]> granicus.if.org Git - php/commitdiff
- Fixed ReflectionProperty::isDefault() giving a wrong result for properties
authorGustavo André dos Santos Lopes <cataphract@php.net>
Tue, 26 Oct 2010 18:47:10 +0000 (18:47 +0000)
committerGustavo André dos Santos Lopes <cataphract@php.net>
Tue, 26 Oct 2010 18:47:10 +0000 (18:47 +0000)
  obtained with ReflectionClass::getProperties().

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

index 67fc992ead457561ffd77cbb0de1217b4dd86d55..7f66d0d7bd453099de6c82c8eb76b5fafa49896b 100644 (file)
@@ -3902,6 +3902,7 @@ static int _adddynproperty(zval **pptr TSRMLS_DC, int num_args, va_list args, ze
        ZVAL_STRINGL(&member, hash_key->arKey, hash_key->nKeyLength-1, 0);
        if (zend_get_property_info(ce, &member, 1 TSRMLS_CC) == &EG(std_property_info)) {
                MAKE_STD_ZVAL(property);
+               EG(std_property_info).flags = ZEND_ACC_IMPLICIT_PUBLIC;
                reflection_property_factory(ce, &EG(std_property_info), property TSRMLS_CC);
                add_next_index_zval(retval, property);
        }
diff --git a/ext/reflection/tests/ReflectionParameter_isDefault.phpt b/ext/reflection/tests/ReflectionParameter_isDefault.phpt
new file mode 100644 (file)
index 0000000..6570770
--- /dev/null
@@ -0,0 +1,34 @@
+--TEST--\r
+ReflectionParameter::isDefault()\r
+--FILE--\r
+<?php\r
+class A {\r
+public $defprop;\r
+}\r
+$a = new A;\r
+$a->myprop = null;\r
+\r
+$ro = new ReflectionObject($a);\r
+$props = $ro->getProperties();\r
+$prop1 = $props[0];\r
+var_dump($prop1->isDefault());\r
+$prop2 = $props[1];\r
+var_dump($prop2->isDefault());\r
+\r
+var_dump($ro->getProperty('defprop')->isDefault());\r
+var_dump($ro->getProperty('myprop')->isDefault());\r
+\r
+$prop1 = new ReflectionProperty($a, 'defprop');\r
+$prop2 = new ReflectionProperty($a, 'myprop');\r
+var_dump($prop1->isDefault());\r
+var_dump($prop2->isDefault());\r
+?>\r
+==DONE==\r
+--EXPECT--\r
+bool(true)\r
+bool(false)\r
+bool(true)\r
+bool(false)\r
+bool(true)\r
+bool(false)\r
+==DONE==\r