Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/09/2006, 11:08
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Un metodo static es muy util por decir cuando quieres hacer metodos que afecten a todas las instancias de la clase, es decir:

Suponiendo que tenemos una clase base:
Código PHP:
class talker {
     private static 
$prefix '';
     public function 
__construct() {}

     public static function 
setPrefix$prefix ) {
          
self::$prefix $prefix;
     }

     public function 
talk$text ) {
          if( !empty( 
self::$prefix ) ) echo self::$prefix;
          echo 
get_class() . "=>" $text;
     }

Ahora creamos unas clases para "hablar"
Código PHP:
class fulano extends talker {}
class 
sutano extends talker {}

$fulano = new fulano();
$sutano = new sutano();
$fulano->talk"hola" );
$sutano->talk"como estas?" ); 
Hasta ahora todo bien sin problemas, pero supongamos que queremos afectar todas las instancias actuales, solo con una linea de codigo, entonces le decimos al metodo estatico:
Código PHP:
talker::setPrefix"-----------\t" );
$sutano->talk"lalala" );
$fulano->talk"haha" ); 
Hasta ahora diras pero pues podrias hacer un metodo interno, pero supongamos que tu clase talker es usada dentro de otras clases, y esta heredada por otras clases, buscar la forma de "afectar" esa clase es bastante dificil, por eso recurrimos a metodos estaticos que sabemos que le va a afectar.

Un ejemplo es por decir, tienes una clase, usuario, hereda a una clase ActiveRecord, esta a su vez, usa una clase DB, si quieres afectar la forma, en que DB regrese los resultados, tendrias que hacer un metodo en ActiveRecord, que a su vez afectara a la clase DB, o, en la clase DB tener un metodo estatico que afecte todas las instancias de DB.

Espero con esto te des una idea para que sirven, y ojo!, en los metodos estaticos, no hay $this, ya que son llamados aparte de una instancia.