Also fixes a memory leak if ::getValue() is used with __get().
timestamp). (denver at timothy dot io)
. Fixed bug #72151 (mysqli_fetch_object changed behaviour). (Anatol)
+- Reflection:
+ . Fixed bug #72174 (ReflectionProperty#getValue() causes __isset call).
+ (Nikita)
+
- Session:
. Fixed bug #71972 (Cyclic references causing session_start(): Failed to
decode session object). (Laruence)
}
zend_unmangle_property_name_ex(ref->prop.name, &class_name, &prop_name, &prop_name_len);
- member_p = zend_read_property(ref->ce, object, prop_name, prop_name_len, 1, &rv);
- ZVAL_DUP(return_value, member_p);
+ member_p = zend_read_property(ref->ce, object, prop_name, prop_name_len, 0, &rv);
+ if (member_p != &rv) {
+ ZVAL_COPY(return_value, member_p);
+ } else {
+ ZVAL_COPY_VALUE(return_value, member_p);
+ }
}
}
/* }}} */
Cannot access non-public member TestClass::prot
Instance without property:
+
+Notice: Undefined property: AnotherClass::$pub2 in %s on line %d
NULL
--- /dev/null
+--TEST--
+Bug #72174: ReflectionProperty#getValue() causes __isset call
+--FILE--
+<?php
+
+class Foo
+{
+ private $bar;
+
+ public function __construct()
+ {
+ unset($this->bar);
+ }
+
+ public function __isset($name)
+ {
+ var_dump(__METHOD__);
+ return true;
+ }
+
+ public function __get($name)
+ {
+ var_dump(__METHOD__);
+ return $name;
+ }
+}
+
+$instance = new Foo();
+$reflectionBar = (new ReflectionProperty(Foo::class, 'bar'));
+$reflectionBar->setAccessible(true);
+var_dump($reflectionBar->getValue($instance));
+
+?>
+--EXPECT--
+string(10) "Foo::__get"
+string(3) "bar"