[nycphp-talk] __get __set methods..
Daniel Krook
krook at us.ibm.com
Tue Apr 19 23:41:04 EDT 2005
Actually, the key to the whole thing (also from Adam's book, pp 261-263)
is to define what values are acceptable as properties in the constructor.
In this example only valOne and valTwo can be set and get:
class Runner {
private $data;
public function __construct($runner = null) {
$this->data = array(
'valOne' => 0,
'valTwo' => ''
);
if (is_array($runner)) {
foreach ($runner as $field => $value) {
$this->$field = $value;
}
}
}
public function __set($property, $value) {
if (isset($this->data[$property])) {
$this->data[$property] = $value;
}
}
public function __get($property) {
if (isset($this->data[$property])) {
return $this->data[$property];
} else {
return false;
}
}
}
talk-bounces at lists.nyphp.org wrote on 04/19/2005 10:01:26 PM:
> __set and __get are magic methods that are called only when the
> properties are not defined in the class, thus, this works:
>
> class Runner {
>
> public function __get($property){
> return $this->$property;
> }
>
> public function __set($property, $value){
> $this->$property = $value;
> }
>
> }
>
> though I believe this is better (pg 39 - Upgrading to PHP5 - how's
> that for a plug Adam?):
>
> class Runner {
> private $data;
>
> public function __get($property){
> if (isset($this->data[$property])){
> return $this->data[$property];
> } else return false;
> }
>
> public function __set($property, $value){
> $this->data[$property] = $value;
> }
> }
>
>
> Why? My guess is because you're able to define your data as private
> via the array...however, I would be interested to know here from
> someone who knows for certain.
>
>
> On 4/19/05, Alex C <alexchan.1976 at gmail.com> wrote:
> > I am trying to use __set and __get magic methods to access private
> > properties of a class. However , I keep on getting this error. I am
> > using PHP 5.03..
> >
> > Fatal error: Cannot access private property Runner::$programName
> >
> > I am not sure what I am doing wrong.. thanks in advance
> >
> > my class looks as follows.
> > ---
> >
> > class Runner {
> > private $programName;
> > private $programDate;
> > private $raceNumber;
> > private $runnerNumber;
> >
> > private $scratchedStatus;
> >
> > public function __get($property){
> > return $this->$property;
> > }
> >
> > public function __set($property, $value){
> > $this->$property = $value;
> > }
> > }
> > _______________________________________________
> > New York PHP Talk Mailing List
> > AMP Technology
> > Supporting Apache, MySQL and PHP
> > http://lists.nyphp.org/mailman/listinfo/talk
> > http://www.nyphp.org
> >
>
>
> --
>
> "When you do things right, people won't be sure you've done anything at
all."
> _______________________________________________
> New York PHP Talk Mailing List
> AMP Technology
> Supporting Apache, MySQL and PHP
> http://lists.nyphp.org/mailman/listinfo/talk
> http://www.nyphp.org
More information about the talk
mailing list