#19384 [Dup->Bgs]: Class methods passing $this context incorrectly when accessing static methods

From: Date: Sat, 14 Sep 2002 15:49:34 +0000
Subject: #19384 [Dup->Bgs]: Class methods passing $this context incorrectly when accessing static methods
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-19349@lists.php.net to get a copy of this message
ID: 19384 Updated by: sniper@php.net Reported By: shamim@poetryunlimited.com -Status: Duplicate +Status: Bogus Bug Type: Scripting Engine problem Operating System: Linux/Windows NT4 PHP Version: 4.2.2 Previous Comments: ------------------------------------------------------------------------ [2002-09-12 23:47:00] alan_k@php.net dupe of http://bugs.php.net/bug.php?id=12622 ------------------------------------------------------------------------ [2002-09-12 23:03:39] shamim@poetryunlimited.com <?php // Example of bug in PHP class method passing $this incorrectly class test1 { var $a; function test1(){$this->a=1;} function showMe() { // Since test3::showMe was called as a static method // This too should be a static method call with no $this echo 'In test1::showMe<hr>'; echo 'Next 2 lines should fail since this method was not called from within this object<br>'; echo '$this is of type '. get_class($this)." in test3::showMe<br>\n"; echo "test1::showMe:a=".$this->a."<br>\n"; } // Class member to test static method call function callMe() { echo 'In test1::callMe<hr>'; echo '$this is of type '.get_class($this)."in test1::callMe<hr>\n"; echo 'Calling class method test3::showMe from an object of type test1<br>'; echo '$this should not be passed since test3::showMe does not exist in objects of type test1<hr>'; // This is a static method call, since test1 objects // do not have a test3::showMe. test3::showMe(); } } class test2 extends test1 { function showMe() { echo 'In test2::showMe<br>'; echo "Next 2 lines should fail since objects of type test1 cannot pass \$this<hr>\n"; echo '$this is of type '. get_class($this)." in test2::showMe<br>\n"; echo "test2::showMe:a=".$this->a."<hr>\n"; echo 'Calling parent::showMe<hr>'; // Since test3::showMe was called as a static method // This too should be a static method call with no $this parent::showMe(); } } class test3 extends test2 { function showMe() { echo 'In test3::showMe<br>'; echo "Next 2 lines should fail since objects of type test1 cannot pass \$this<hr>\n"; echo '$this is of type '. get_class($this)." in test3::showMe<br>\n"; echo "test3::showMe:a=".$this->a."<hr>\n"; echo 'Calling parent::showMe<hr>'; // Since test3::showMe was called as a static method // This too should be a static method call with no $this parent::showMe(); } } // object $a is of type test1 $a=new test1; $a->callMe(); /* Results In test1::callMe -------------------------------------------------------------------------------- $this is of type test1in test1::callMe -------------------------------------------------------------------------------- Calling class method test3::showMe from an object of type test1 $this should not be passed since test3::showMe does not exist in objects of type test1 -------------------------------------------------------------------------------- In test3::showMe Next 2 lines should fail since objects of type test1 cannot pass $this -------------------------------------------------------------------------------- $this is of type test1 in test3::showMe test3::showMe:a=1 -------------------------------------------------------------------------------- Calling parent::showMe -------------------------------------------------------------------------------- In test2::showMe Next 2 lines should fail since objects of type test1 cannot pass $this -------------------------------------------------------------------------------- $this is of type test1 in test2::showMe test2::showMe:a=1 -------------------------------------------------------------------------------- Calling parent::showMe -------------------------------------------------------------------------------- In test1::showMe -------------------------------------------------------------------------------- Next 2 lines should fail since this method was not called from within this object $this is of type test1 in test3::showMe test1::showMe:a=1 */ ?> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=19384&edit=1

« previous php.bugs (#19349) next »