Re: __get() accessor question (a bug maybe?)

From: Date: Wed, 15 Nov 2006 16:45:46 +0000
Subject: Re: __get() accessor question (a bug maybe?)
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-244681@lists.php.net to get a copy of this message
TemuriI wrote:
class baseForm { private $_id = 10; function __get($member) {
       echo "Accessing member \"{$member}\" : <br />\n";
       return $this->$member;
} function checkID() {
       echo $this->_id."<br />\n";
} } class inputText extends baseForm { function display() {
       $this->checkID();
       echo $this->_id."<br />\n";
} } $f = new inputText(); echo $f -> display();
Ok, what you're seeing is related to the order in which PHP tries to find matching symbols. In checkID() it will not use __get() because it can access the member variable directly. When display() does it the fact that $_id is private trips it up so it falls back to trying __get(). The __get() is triggered everywhere as long as a better match cannot be found. If you really need to have both go through __get(), name the internal private vars differently and have __get() translate the external name to the internal name. -Stut

« previous php.general (#244681) next »