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.