note 85656 added to language.oop5.visibility

From: Date: Wed, 10 Sep 2008 21:21:33 +0000
Subject: note 85656 added to language.oop5.visibility
Groups: php.notes 
Request: Send a blank email to php-notes+get-144319@lists.php.net to get a copy of this message
UNDERSTANDING PHP's OBJECT VISIBILITY Sometimes it's good to see a list of many extended classes, one right after the other - just for the sole purpose of looking at their inherited members. Maybe this will help: class MyClass_1{ public $pubVal = 'Hello World!'; protected $proVal = 'Hello FROM MyClass_1'; private $priVal = 'Hello TO MyClass_1'; public function __toString(){ return "MyClass_1[public=$this->pubVal, protected=$this->proVal, private=$this->priVal]"; } } class MyClass_2 extends MyClass_1{ public function __toString(){ return "MyClass_2[public=$this->pubVal, protected=$this->proVal, private=$this->priVal]"; } } class MyClass_3 extends MyClass_2{ private $priVal = 'Hello TO MyClass_3'; public function __toString(){ return "MyClass_3[public=$this->pubVal, protected=$this->proVal, private=$this->priVal]"; } } class MyClass_4 extends MyClass_3{ protected $proVal = 'Hello FROM MyClass_4'; public function __toString(){ return "MyClass_4[public=$this->pubVal, protected=$this->proVal, private=$this->priVal]"; } } class MyClass_5 extends MyClass_4{ public function __toString(){ return "MyClass_5[public=$this->pubVal, protected=$this->proVal, private=$this->priVal]"; } } class MyClass_6 extends MyClass_5{ private $priVal = 'Hello TO MyClass_6'; public function __toString(){ return "MyClass_6[public=$this->pubVal, protected=$this->proVal, private=$this->priVal]"; } } echo (new MyClass_1()) . '<br>'; echo (new MyClass_2()) . '<br>'; echo (new MyClass_3()) . '<br>'; echo (new MyClass_4()) . '<br>'; echo (new MyClass_5()) . '<br>'; echo (new MyClass_6()) . '<br>'; The list of extended objects: MyClass_1[public=Hello World!, protected=Hello FROM MyClass_1, private=Hello TO MyClass_1] MyClass_2[public=Hello World!, protected=Hello FROM MyClass_1, private=] MyClass_3[public=Hello World!, protected=Hello FROM MyClass_1, private=Hello TO MyClass_3] MyClass_4[public=Hello World!, protected=Hello FROM MyClass_4, private=] MyClass_5[public=Hello World!, protected=Hello FROM MyClass_4, private=] MyClass_6[public=Hello World!, protected=Hello FROM MyClass_4, private=Hello TO MyClass_6] Notice in the class definitions, I made absolutly no attempt to change protected members to private, etc. - that gets too confusing and is not necessary - though I did redeclare a few members with the same var name and visibility strength. One other noteworthy: the output for MyClass_2, there seems to be a private property with value of empty string. Here, $priVal was not inherited from MyClass_1 because it is private in MyClass_1, instead, because of PHP's relaxed syntax, it was actually created right there in MyClass2::__toString() method... not only that, it is not a private member either. Watch out for this kind of thing, as PHP can sometimes give confusing impressions. ---- Server IP: 69.147.83.197 Probable Submitter: 67.150.9.220 ---- Manual Page -- http://www.php.net/manual/en/language.oop5.visibility.php Edit -- https://master.php.net/note/edit/85656 Del: integrated -- https://master.php.net/note/delete/85656/integrated Del: useless -- https://master.php.net/note/delete/85656/useless Del: bad code -- https://master.php.net/note/delete/85656/bad+code Del: spam -- https://master.php.net/note/delete/85656/spam Del: non-english -- https://master.php.net/note/delete/85656/non-english Del: in docs -- https://master.php.net/note/delete/85656/in+docs Del: other reasons-- https://master.php.net/note/delete/85656 Reject -- https://master.php.net/note/reject/85656 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#144319) next »