summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--ext/reflection/php_reflection.c2
-rw-r--r--ext/reflection/tests/bug60367.phpt26
3 files changed, 28 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 83b5eb98d3..60a30952e1 100644
--- a/NEWS
+++ b/NEWS
@@ -66,6 +66,7 @@ PHP NEWS
- Reflection:
. Fixed bug #60357 (__toString() method triggers E_NOTICE "Array to string
conversion"). (Laruence)
+ . Fixed bug #60367 (Reflection and Late Static Binding). (Laruence)
- SOAP extension:
. Added new SoapClient option "keep_alive". FR #60329. (Pierrick)
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 1e0386a601..754be1483c 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -2811,7 +2811,7 @@ ZEND_METHOD(reflection_method, invoke)
fcc.initialized = 1;
fcc.function_handler = mptr;
fcc.calling_scope = obj_ce;
- fcc.called_scope = obj_ce;
+ fcc.called_scope = intern->ce;
fcc.object_ptr = object_ptr;
result = zend_call_function(&fci, &fcc TSRMLS_CC);
diff --git a/ext/reflection/tests/bug60367.phpt b/ext/reflection/tests/bug60367.phpt
new file mode 100644
index 0000000000..31e8a2e947
--- /dev/null
+++ b/ext/reflection/tests/bug60367.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Bug #60367 (Reflection and Late Static Binding)
+--FILE--
+<?php
+abstract class A {
+
+ const WHAT = 'A';
+
+ public static function call() {
+ echo static::WHAT;
+ }
+
+}
+
+class B extends A {
+
+ const WHAT = 'B';
+
+}
+
+$method = new ReflectionMethod("b::call");
+$method->invoke(null);
+$method = new ReflectionMethod("A::call");
+$method->invoke(null);
+--EXPECTF--
+BA