summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-10-04 12:42:58 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-10-04 12:42:58 +0200
commitfec0ff8cb0dd496737ab07dabad8ca5050818594 (patch)
tree2bb977671ef8eec9df6867118450ddf8d36d9259
parentdc3c8c75dad511f08ac5e1dd2e854003e175894f (diff)
parentca652aafa8d293ac46a171b6b1326431aa13600c (diff)
downloadphp-git-fec0ff8cb0dd496737ab07dabad8ca5050818594.tar.gz
Merge branch 'PHP-7.4'
-rw-r--r--Zend/tests/bug50810.phpt2
-rw-r--r--Zend/zend_builtin_functions.c6
-rw-r--r--ext/standard/tests/class_object/method_exists_basic_001.phpt6
3 files changed, 9 insertions, 5 deletions
diff --git a/Zend/tests/bug50810.phpt b/Zend/tests/bug50810.phpt
index e36ab0c30b..b2a2931651 100644
--- a/Zend/tests/bug50810.phpt
+++ b/Zend/tests/bug50810.phpt
@@ -40,7 +40,7 @@ var_dump($example->propertyBarExists());
?>
--EXPECT--
-bool(false)
+bool(true)
bool(true)
bool(true)
bool(true)
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 40692925e7..f16bf1540f 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -1148,7 +1148,11 @@ ZEND_FUNCTION(method_exists)
zend_string_release_ex(lcname, 0);
if (func) {
- RETURN_BOOL(!(func->common.fn_flags & ZEND_ACC_PRIVATE) || func->common.scope == ce);
+ /* Exclude shadow properties when checking a method on a specific class. Include
+ * them when checking an object, as method_exists() generally ignores visibility.
+ * TODO: Should we use EG(scope) for the object case instead? */
+ RETURN_BOOL(Z_TYPE_P(klass) == IS_OBJECT
+ || !(func->common.fn_flags & ZEND_ACC_PRIVATE) || func->common.scope == ce);
}
if (Z_TYPE_P(klass) == IS_OBJECT) {
diff --git a/ext/standard/tests/class_object/method_exists_basic_001.phpt b/ext/standard/tests/class_object/method_exists_basic_001.phpt
index 8046051523..c0b656b3f9 100644
--- a/ext/standard/tests/class_object/method_exists_basic_001.phpt
+++ b/ext/standard/tests/class_object/method_exists_basic_001.phpt
@@ -50,7 +50,7 @@ foreach ($methods as $method) {
echo "Done";
?>
--EXPECT--
- ---(Using string class name)---
+---(Using string class name)---
Does C::inherit_pub exist? bool(true)
Does C::inherit_prot exist? bool(true)
Does C::inherit_priv exist? bool(false)
@@ -68,10 +68,10 @@ Does C::non_existent exist? bool(false)
---(Using object)---
Does C::inherit_pub exist? bool(true)
Does C::inherit_prot exist? bool(true)
-Does C::inherit_priv exist? bool(false)
+Does C::inherit_priv exist? bool(true)
Does C::inherit_static_pub exist? bool(true)
Does C::inherit_static_prot exist? bool(true)
-Does C::inherit_static_priv exist? bool(false)
+Does C::inherit_static_priv exist? bool(true)
Does C::pub exist? bool(true)
Does C::prot exist? bool(true)
Does C::priv exist? bool(true)