Bon, alors, avant de parler des méthodes statiques, il faut parler des attributs statiques.
Un attribut non statique fait partie d'un objet, il est étanche vis à vis des autres objets.
class Voiture {
public $vitesse;
}
$v1 = new Voiture();
$v1->vitesse = 120;
$v2 = new Voiture();
$v2->vitesse = 60; // pas le même espace mémoire que $v1->vitesse !
Un attribut statique, quant à lui, fais partie des élements de la classe, c'est à dire que tout les objet partage sa connaissance et peuvent le modifier.
Il agit donc comme une variable globale pour tous les objets d'une classe :
class Voiture {
private static $nbVoiture;
public function __construct(){
self::$nbVoiture ++ ;
}
}
L'attribut statique est commun à tout les objets "voiture", c'est ce qui permet des les compter.
Maintenant, comme tu as noté que $nbVoiture est private, comment puis-je obtenir le nombre de voiture ?
Si je fais :
public function getNbVoiture(){
return self::$nbVoiture;
}
Il y a un problème : je vais devoir instancier un objet voiture avant de pouvoir en connaitre le nombre, je ne pourrais donc jamais affiché 0 voiture.
La fonction getNbVoiture() est donc nécessairement statique :
public static function getNbVoiture(){
return self::$nbVoiture;
}
Une fonction ne peut être statique que si elle utilise des élements (attributs ou méthodes) statiques de la classe.
Je vais encore me faire des ennemies, mais les fonctions statiques je trouve ca très bof ...
Notamment pour les classes "utilitaires" : cela sert dans les langage full objet comme java car on ne peux pas faire autrement, mais en PHP, on peux simplement écrire des fonctions et oublier un peu la POO. On peux également faire des objets utilitaires à instancier normalement, il n'y a pas de mal à ca.