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

Reply via email to