diff options
author | Xinchen Hui <laruence@php.net> | 2011-11-24 09:16:11 +0000 |
---|---|---|
committer | Xinchen Hui <laruence@php.net> | 2011-11-24 09:16:11 +0000 |
commit | 3db55c8233420b8713155302ca42b5851ac94c67 (patch) | |
tree | 5113deeb92e0f9541f5711b12dfd769d5a76ccd9 | |
parent | c05614fb6d6f9d4d44b5fa9878635d6e5cdb0b1c (diff) | |
download | php-git-3db55c8233420b8713155302ca42b5851ac94c67.tar.gz |
Fixed bug #60367 (Reflection and Late Static Binding)
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | ext/reflection/php_reflection.c | 2 | ||||
-rw-r--r-- | ext/reflection/tests/bug60367.phpt | 26 |
3 files changed, 28 insertions, 1 deletions
@@ -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 |