Comentarios Recientes

PHP: magic method __set

| Categorías PHP, Programacion, Tecnologia, internet, mysql | | Comentario 2

PHP nos ofrece la facilidad de usar algunos métodos mágicos en nuestras Classes que pueden servirnos de muchísima ayuda y que muchos dejan pasar por alto estas herramientas, muchas veces muy eficientes y útiles.  Hoy les traigo algunos ejemplos del uso del método mágico “__set”.

El método __set es invocado cuando intentamos asignarle valor a una propiedad existente o no de un objeto.  Veamos este primer ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
< ?php
class MyClass{
  private $_var1;
  public function __construct($var = null){
     $this->_var1 = $var;
  }
  public function printVar($varname){
     print $this->$varname;
  }
  public function __set($var, $value){
    $this->$var = $value;
  }
}
?>
/***************************************************/
//Ejemplo de uso:
$MyObject = new MyClass;
$MyObject->myvar = 5;
$MyObject->printVar('myvar'); // Salida sera: 5

En el ejemplo anterior, la propiedad MyClass::myvar no existe, pero es creada en ese instante que se le asigna el valor “5″.

Otro buen ejemplo puede ser este que encontré en TuxRadar.com:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 < ?php
    //...[snip - add your MySQL connection code here]...
 
    class mytable {
        public $Name;
 
        public function __construct($Name) {
            $this->Name = $Name;
        }
 
        public function __set($var, $val) {
            mysql_query("UPDATE {$this->Name} SET $var = '$val';");
        }
 
        // public $AdminEmail = 'foo@bar.com';
    }
 
    $systemvars = new mytable("systemvars");
    $systemvars->AdminEmail = 'telrev@somesite.net';
?>
number of view: 358

Post Similares

2 Responses to “PHP: magic method __set”

  1. JuniHH says:

    Vero que en el segundo ejemplo usan “__construct”. No se supoene que eso es un constructor de PHP4 ??

  2. En los dos hay uso de “__construct”, que no es de PHP4, en PHP4 usabas un metodo con el mismo nombre que la Clase…