[PHP] overloading members. aghhh!!!
Hi all. Yesterday i have looking for the overloading members Member overloading void __set ( string name, mixed value ) mixed __get ( string name ) As an example i put this code: class foo { private $ID; private $Name; private $LastName; private function __get($var) { return $var; } private function __set($var,$value) { $var = $value; } } $foo = new foo(); $foo->ID = 1; $foo->Name = "Henry"; $foo->LastName = "Ford", that's horrible!!! And if i want to validate that ID > 0?? i have to put this validation in the function __set for each property?? private function __set($var,$value) { if ($var = 'ID') { //validate that ID is > 0 } $var = $value; } Not exists a better method to manage the properties in a class? Like in C# private int _ID; public int ID { get { return _ID;} set { if (value > 0) { _ID = value; } else { //Exception } } } -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] overloading members. aghhh!!!
Ok, this is a great solution Thanks ;) "Robert Cummings" <[EMAIL PROTECTED]> escribió en el mensaje news:[EMAIL PROTECTED] > On Mon, 2007-11-19 at 11:25 +0100, Kiketom wrote: >> Hi all. >> Yesterday i have looking for the overloading members >> >> Member overloading >> void __set ( string name, mixed value ) >> mixed __get ( string name ) >> >> As an example i put this code: >> >> class foo >> { >> private $ID; >> private $Name; >> private $LastName; >> >> private function __get($var) >> { >> return $var; >> } >> >> private function __set($var,$value) >> { >> $var = $value; >> } >> } >> >> >> $foo = new foo(); >> $foo->ID = 1; >> $foo->Name = "Henry"; >> $foo->LastName = "Ford", >> >> >> that's horrible!!! >> >> And if i want to validate that ID > 0?? >> >> i have to put this validation in the function __set for each property?? >> private function __set($var,$value) >> { >> if ($var = 'ID') >> { >> //validate that ID is > 0 >> } >> $var = $value; >> } >> >> >> Not exists a better method to manage the properties in a class? >> >> Like in C# >> >> private int _ID; >> >> public int ID >> { >> get { return _ID;} >> set >> { >> if (value > 0) >> { >> _ID = value; >> } >> else >> { >> //Exception >> } >> } >> } > > Well, if you really want to, you can do the following: > > > class foo > { >private $ID; >private $Name; >private $LastName; > >private function __get( $var ) >{ >if( method_exists( $this, '___get_'.$var ) ) >{ >return $this->{'___get_'.$var}(); >} >else >{ >return $this->{$var}; >} >} > >private function __set( $var, $value ) >{ >if( method_exists( $this, '___get_'.$var ) ) >{ >return $this->{'___set_'.$var}( $value ); >} >else >{ >return ($this->{$var} = $value); >} >} > >private function ___get_ID() >{ >} > >private function ___set_ID( $value ) >{ >} > } > > ?> > > But I wouldn't. > > Cheers, > Rob. > -- > ... > SwarmBuy.com - http://www.swarmbuy.com > >Leveraging the buying power of the masses! > ... -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] overloading members. aghhh!!!
Then if i make this $foo = new foo(); $foo->ID = 12; what is happening?? if __Set and __Get only works if a member isn't exits, How come I do this? $foo->ID = 12; if the member $ID is private??? I thought that this was possible because i have declared the two method set and get :P "Jochem Maas" <[EMAIL PROTECTED]> escribió en el mensaje news:[EMAIL PROTECTED] > Kiketom wrote: >> Hi all. >> Yesterday i have looking for the overloading members >> >> Member overloading >> void __set ( string name, mixed value ) >> mixed __get ( string name ) >> >> As an example i put this code: >> >> class foo >> { >> private $ID; >> private $Name; >> private $LastName; > > when you declare these three as 'real' members, __get() and __set() > will no longer be called - they are only called for non-existent members. > > so instead dump your data in an array or something > > private $data = array( > 'ID' => null, > 'Name' => null, > 'LastName' => null, > ); > >> >> private function __get($var) >> { >> return $var; > > there is no such thing as 'implicit class scope' $var will not refer to > $this->var as you seem to expect. > > return isset($this->data[$var]) ? $this->data[$var] : null; > >> } >> >> private function __set($var,$value) >> { >> $var = $value; > > same thing here. > > if (array_key_exists($var, $this->data) > $this->data[$var] = $value; > >> } >> } >> -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] overloading members. aghhh!!!
Ok, no problem ;) "Jochem Maas" <[EMAIL PROTECTED]> escribió en el mensaje news:[EMAIL PROTECTED] > Kiketom wrote: >> Then if i make this >> >> $foo = new foo(); >> $foo->ID = 12; >> >> what is happening?? >> if __Set and __Get only works if a member isn't exits, >> >> How come I do this? >> $foo->ID = 12; >> if the member $ID is private??? >> >> I thought that this was possible because i have declared the two method >> set >> and get :P >> > > ignore my previous reply - it seems it was completely wrong. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php