par
Ryle » 03 nov. 2006, 15:27
Ca devient très utile lorsque tu veux faire appel a un attribut ou a une méthode liée à ton objet de manière générale et pas à une instance en particulier...
Supposons que j'ai une classe qui corresponde à une table de ma base, ses attributs correspondent aux colonnes et j'ai des méthodes pour lire et écrire directement en base à partir de l'objet. Si j'ai besoin de savoir combien il y a de lignes dans ma table, je peux très bien faire une fonction qui va aller les compter, mais dans la mesure ou j'ai un objet qui est dédié à cette table, je vais rester cohérent et la mettre dedans.
Mais pour connaitre mon nombre de ligne, je n'ai pas besoin d'une instance de ma classe... d'une je ne saurais pas laquelle choisir (pourquoi une plus qu'une autre) et surtout, peut importe celle pour laquelle j'opte, elles n'apportent rien au résultat... Je "déclare" donc ma méthode static et je l'appelle directement sans instancier la classe :
Classe::methode();
Je peux toujours utiliser cette écriture
$instance = new Classe();
$instance->methode();
mais cela perd en cohérence puisque ma methode n'est pas spécifiquement liée à mon instance, et retournera toujours le même résultat quelle que soit l'instance.
De la même manière ma méthode (ou une constante propre à ma classe) pourrait me donner le nom de la table, m'évitant de charger un fichier de constantes globales avec tout et n'importe quoi

Ca devient très utile lorsque tu veux faire appel a un attribut ou a une méthode liée à ton objet de manière générale et pas à une instance en particulier...
Supposons que j'ai une classe qui corresponde à une table de ma base, ses attributs correspondent aux colonnes et j'ai des méthodes pour lire et écrire directement en base à partir de l'objet. Si j'ai besoin de savoir combien il y a de lignes dans ma table, je peux très bien faire une fonction qui va aller les compter, mais dans la mesure ou j'ai un objet qui est dédié à cette table, je vais rester cohérent et la mettre dedans.
Mais pour connaitre mon nombre de ligne, je n'ai pas besoin d'une instance de ma classe... d'une je ne saurais pas laquelle choisir (pourquoi une plus qu'une autre) et surtout, peut importe celle pour laquelle j'opte, elles n'apportent rien au résultat... Je "déclare" donc ma méthode static et je l'appelle directement sans instancier la classe :
[php]Classe::methode();[/php]
Je peux toujours utiliser cette écriture
[php]$instance = new Classe();
$instance->methode();[/php]mais cela perd en cohérence puisque ma methode n'est pas spécifiquement liée à mon instance, et retournera toujours le même résultat quelle que soit l'instance.
De la même manière ma méthode (ou une constante propre à ma classe) pourrait me donner le nom de la table, m'évitant de charger un fichier de constantes globales avec tout et n'importe quoi :)