--- /dev/null
+--TEST--
+Bug #42211 (property_exists() fails to find protected properties from a parent class)
+--FILE--
+<?php
+class A {
+ function foo() {
+ var_dump(property_exists('B', 'publicBar'));
+ var_dump(property_exists('B', 'protectedBar'));
+ var_dump(property_exists('B', 'privateBar'));
+ }
+}
+
+class B extends A {
+ static public $publicBar = "ok";
+ static protected $protectedBar = "ok";
+ static private $privateBar = "fail";
+}
+
+$a = new A();
+$a->foo();
+$b = new B();
+$b->foo();
+--EXPECT--
+bool(true)
+bool(false)
+bool(false)
+bool(true)
+bool(true)
+bool(false)
+
}
zend_u_unmangle_property_name(Z_TYPE_PP(property), property_info->name, property_info->name_length, &class_name, &prop_name);
if (class_name.s[0] == '*') {
- if (instanceof_function(EG(scope), ce TSRMLS_CC)) {
+ if (instanceof_function(EG(scope), ce TSRMLS_CC) ||
+ (EG(This) && instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC))) {
RETURN_TRUE;
}
RETURN_FALSE;