|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2002-09-12 23:47 UTC] alan_k@php.net
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Nov 07 01:00:01 2025 UTC |
<?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 */ ?>