ID: 47402 Updated by: dmi...@php.net Reported By: col...@php.net -Status: Assigned +Status: Feedback Bug Type: Scripting Engine problem PHP Version: 5.3.0beta1 Assigned To: dmitry New Comment:
This is not a bug, but just an illustration of is_callable/call_user_func mess which was fixed in 5.3 comparing to 5.2. The following extended example illustrates inconsistent behaviour of 5.2. Using call_user_func() it passes $this in one case and not in the other, however direct call passes %this in both cases. <?php class A { public function test() { B::foo(); call_user_func(array("B","foo")); } public function bar() { var_dump($this); } } class B extends A { public function foo() { var_dump($this); } public function test2() { A::bar(); call_user_func(array("A","bar")); } } $b = new B; $b->test(); $b->test2(); ?> PHP-5.2 ------- object(B)#1 (0) { } NULL object(B)#1 (0) { } object(B)#1 (0) { } PHP-5.3 ------- object(B)#1 (0) { } object(B)#1 (0) { } object(B)#1 (0) { } object(B)#1 (0) { } Previous Comments: ------------------------------------------------------------------------ [2009-02-16 10:33:00] col...@php.net Description: ------------ Depending on the context and the callback, call_user_func didn't propagate $this in 5_2. It now does in 5_3. Not sure which one is more correct, but there is definitely a potential BC break here. Reproduce code: --------------- <?php class A { public function test() { B::foo(); call_user_func(array("B", "foo")); } } class B extends A { public function foo() { var_dump($this); } } $b = new B; $b->test(); ?> Expected result: ---------------- // 5_2's output object(B)#1 (0) { } NULL Actual result: -------------- // 5_3's output object(B)#1 (0) { } object(B)#1 (0) { } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=47402&edit=1