ID: 47402
Updated by: [email protected]
Reported By: [email protected]
-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] [email protected]
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