note 85656 added to language.oop5.visibility
| From: | wbcarts at juno dot com | 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