Hi Greg, thanks for the example. I think i now understand a bit more.
I just need a confirmation on this
$table->FirstName = 'Greg';
$table->LastName = 'Beaver';
This will actually call __set and it will create a member variable named
FristName with the value Greg.
And if you call $table->FirstName and it is not set it will return false
right ?
Honestly i find this way of coding no so clean.
Maybe it is because i am used to do all my sets by hand
$this->SetFirstName($first_name){
$this->first_name= $first_name;
}
$this->GetFirstName(){
if(!isset($this->first_name)){
return false;
}else{
return $this->first_name;
}
}
SO what are the advantages to use __get, __set.
Aviously the way i do it, i do it i have to re have to redoit for all my
variables.
But also i was told to never access a variable directly so i have the
feeling like i am doing a capital sin :D
Yann
On Wed, 2003-07-09 at 02:59, Yann Larrivee wrote:
> -----Forwarded Message-----
>
> From: Greg Beaver <[EMAIL PROTECTED]>
> To: Yann Larrivee <[EMAIL PROTECTED]>
> Cc: [EMAIL PROTECTED] <[EMAIL PROTECTED]>
> Subject: Re: __get, __set, __clone
> Date: 08 Jul 2003 22:13:37 -0400
>
> Hi Yann,
>
> What you are trying to do is possible in PHP 4, actually:
>
> <?php
> class MyTester {
> function MyTester()
> {
> $this->var_name1 = "value1";
> $this->var_name2 = "value2";
> }
> }
>
> $test = new MyTester;
> var_dump($test); // shows two variables, $var_name1 and $var_name2
> ?>
>
> Here is sample code that uses __set to allow you to transparently
> declare an object that allows you to set database values just by setting
> properties.
>
> <?php
> class UsesSetForMysql {
> private $_db;
> private $_table;
> private $_row;
> private $_keyname;
> function __construct($server, $user, $password, $database, $table,
> $keyname, $keyvalue)
> {
> $this->_db = mysql_connect($server, $user, $password);
> $this->_keyname = $keyname;
> $this->_table = $table;
> if ($this->_db) {
> $test = mysql_select_db($this->_db, $database);
> if ($test) {
> $a = mysql_query('SELECT * FROM ' . $this->_table . '
> WHERE ' . $this->_keyname . ' = "' . $keyvalue . '"');
> if ($a) {
> $this->_row = mysql_fetch_array($a, MYSQL_ASSOC);
> }
> } else {
> mysql_close($this->_db);
> $this->_db = false;
> }
> }
> }
>
> function __destruct()
> {
> if ($this->_db) {
> mysql_close($this->_db);
> $this->_db = false;
> }
> }
>
> function __set($name, $value)
> {
> if (isset($this->_row) && $this->_row) {
> $this->_row[$name] = $value;
> $a = mysql_query('UPDATE ' . $this->_table . " SET $name =
> \"$value\" WHERE " . $this->_keyname . ' = "' .
> $this->_row[$this->_keyname] . '"');
> if ($a) {
> $keyvalue = $this->_row[$name];
> if ($name == $this->_keyname) {
> $keyvalue = $value;
> }
> $a = mysql_query('SELECT * FROM ' . $this->_table . '
> WHERE ' . $this->_keyname . ' = "' . $keyvalue . '"');
> $this->_row = mysql_fetch_array($a, MYSQL_ASSOC);
> }
> }
> }
>
> function __get($name, &$value)
> {
> if (isset($this->_row) && is_array($this->_row)) {
> if (isset($this->_row[$name])) {
> $value = $this->_row[$name];
> return true;
> } else {
> return false;
> }
> }
> }
> }
>
> $table = new UsesSetForMysql('localhost', 'dummy', 'madeup', 'mytable',
> 'mykey', 6);
> $table->FirstName = 'Greg';
> $table->LastName = 'Beaver';
> // etc.
> ?>
>
> :)
> Greg
>
> Yann Larrivee wrote:
> > Hi, in the past 2 days i have been looking into php5 and it's new
> > features.
> >
> > I am not a psecialiste of OOP (only been OOPing for 2 month)
> >
> > For a moment i tought that __set would allow me not to have to define a
> > methode __set that would set a value to a member variable.
> >
> > It seems like we have to define the class __set and __get.
> >
> > for example i tought i would be able to do.
> >
> > class a{
> > function __construct(){
> > $this->__set("var_name1","value1");
> > $this->__set("var_name2","value2");
> > }
> > }
> >
> > I read these 2 tutorial
> > http://www.phpbuilder.com/columns/argerich20030411.php3?page=5 (the
> > explanation seems really bad to me and does not show any usefull way to
> > use these functions)
> >
> > http://talks.php.net/show/php5intro/25
> > This one well i comes back to the same thing as if i code it my self.
> >
> > So my big question is why , when , how do we use these features
> > (__get,__set)
> > For a moment i tought i would save me time, but if i have to redefine
> > them what is the point ?
> >
> > I guess i am somewhat confuse on this issue, any explanation would be
> > appreciated.
> >
> > Thanks
> >
> >
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php