Bonjour à tous,
en php objet, on peut à priori appeler une méthode de manière statique(::) ou en instanciant un objet avant (->)
comment choisir quand utiliser quoi?
merci à tous pour vos réponses.
class MaClasse {
public static function maFonctionStatic(){
}
public function maFonction(){
}
}
Dans ce cas, et bien que PHP permettent d'executer les méthodes n'importe comment, il convient pour une meilleur lecture du code de faire : MaClass::maFonctionStatic();
$maClasse = new MaClasse();
$maClasse->maFonction();
C'est à dire d'utiliser l'opérateur de résolution de portée (::) sur les méthodes statiques, et l'opérateur de déréférencement (->) pour les méthodes non statiques.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 !
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. 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. 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.