ID: 46246
User updated by: borysf at wp dot pl
Reported By: borysf at wp dot pl
-Status: Feedback
+Status: Open
Bug Type: Scripting Engine problem
Operating System: Linux
PHP Version: 5.2.6
New Comment:
I made a mistake in the code snipped. Method Test in class A should be
declared as private, then the problem occures. Here is the corrected
code:
class A
{
private function Test()
{
echo 'Hello from '.get_class($this);
}
public function call($method, $args = array())
{
return $this->$method();
//return call_user_func(array($this, $method));
}
}
class B extends A
{
protected function Test()
{
echo 'Overridden hello from '.get_class($this);
}
}
$a = new A;
$b = new B;
$a->call('Test');
$b->call('Test');
Previous Comments:
------------------------------------------------------------------------
[2008-10-06 23:26:43] [EMAIL PROTECTED]
Please try using this CVS snapshot:
http://snaps.php.net/php5.2-latest.tar.gz
For Windows (zip):
http://snaps.php.net/win32/php5.2-win32-latest.zip
For Windows (installer):
http://snaps.php.net/win32/php5.2-win32-installer-latest.msi
Can't reproduce on 5.2.6 and 5.2.7-dev.
------------------------------------------------------------------------
[2008-10-06 21:51:30] borysf at wp dot pl
Description:
------------
There is a difference in behavior of call_user_func(array($this,
$method)) and $this->$method() while class B inherits from class A and
both declares the same method. The call_user_func() function seems to
work as expected, but using $this->$method() seems to invoke parent
method implementation instead of the overridden one.
Reproduce code:
---------------
class A
{
protected function Test()
{
echo 'Hello from '.get_class($this);
}
public function call($method, $args = array())
{
return $this->$method();
//return call_user_func(array($this, $method));
}
}
class B extends A
{
protected function Test()
{
echo 'Overridden hello from '.get_class($this);
}
}
$a = new A;
$b = new B;
$a->call('Test');
$b->call('Test');
Expected result:
----------------
Hello from A
Overridden hello from B
Actual result:
--------------
Hello from A
Hello from B
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=46246&edit=1