diff options
author | Dmitry Stogov <dmitry@php.net> | 2007-08-08 13:32:58 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2007-08-08 13:32:58 +0000 |
commit | ad8aa49f065a6563da73090d1a3f228719c072f9 (patch) | |
tree | 853678fcce87b649af4a40227834d54d2a6f59c9 | |
parent | 8d87a8cf7094ff51cfa0acb0c98ef422c622ca42 (diff) | |
download | php-git-ad8aa49f065a6563da73090d1a3f228719c072f9.tar.gz |
Fixed bug #42211 (property_exists() fails to find protected properties from a parent class)
-rw-r--r-- | Zend/tests/bug42211.phpt | 30 | ||||
-rw-r--r-- | Zend/zend_builtin_functions.c | 3 |
2 files changed, 32 insertions, 1 deletions
diff --git a/Zend/tests/bug42211.phpt b/Zend/tests/bug42211.phpt new file mode 100644 index 0000000000..e9f2a1e212 --- /dev/null +++ b/Zend/tests/bug42211.phpt @@ -0,0 +1,30 @@ +--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) + diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index e89552bbcc..976c713090 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1014,7 +1014,8 @@ ZEND_FUNCTION(property_exists) } 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; |