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

Reply via email to