TemuriI wrote: > Hi all, here is the code I am having problem with: > > ============================================ > > class baseForm { > private $_id = 10; > > function __get($member) > { > echo "Accessing member \"{$member}\" : <br />\n"; > return $this->$member; > } > function checkID() > { > echo $this->_id."<br />\n"; here you are accessing a private member variable that does exist, hence __get() is not triggered by checkID(). make the $_id var protected and you should see that __get() is not triggered for the subclasses' display() method either. > } > } > class inputText extends baseForm > { > function display() > { > $this->checkID(); > echo $this->_id."<br />\n"; > } > } > $f = new inputText(); > echo $f -> display(); > > > ============================================ > > > The question is: why the string 'Accessing member "_id" :' is only > displayed once? If you look at the code - it actually accesses $_id > member TWICE. But __get() gets gets triggered only once. WHY?!! > > From what I see, the __get() accessor function is triggerred only from > OUTSIDE the class. you see correct! but [I think] fail to see that there is a difference between properties that actually exist and properties that don't.... class A { private $props = array("_id" => 1); function testA() { echo $this->_id,"\n"; } function __get($m) { echo "Accessing member \"{$m}\" : \n"; if (isset($this->props[$m])) echo $this->props[$m]; } } class B extends A { function testB() { $this->testA(); echo $this->_id,"\n"; } } $b = new B; $b->testB(); > > PHP Version 5.1.6, installed on Win32 (unfortunately). > > Thank you in advance, > Temuri > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php