double : quel signification ?

lézard
Invité n'ayant pas de compte PHPfrance

03 nov. 2006, 01:53

Bonsoir !

Parfois je vois dans des scripts php des ::

A quoi cela sert-il ?

ViPHP
ViPHP | 1961 Messages

03 nov. 2006, 01:58

Bonsoir,

Ta réponse se trouve ici
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

lézard
Invité n'ayant pas de compte PHPfrance

03 nov. 2006, 02:23

Merci

Mais j'ai pas bien compris l'utilité.

J'ai un peu regardé la doc, et il dise qu'on ne peut pas utiliser l'opérateur -> sur une méthode statique.

C'est quoi l'avantage de déclarer une fonction ou une variable en static ?

Je comprends pas bien.

Paamayim Nekudotayim, c'est un nom de barbare :D

ViPHP
ViPHP | 1961 Messages

03 nov. 2006, 02:36

Re,

Une méthode ou attribut statique se différencie surtout par le fait que l'on peux acceder sans avoir à instencier l'objet.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

lézard
Invité n'ayant pas de compte PHPfrance

03 nov. 2006, 02:46

Ah donc si je déclare dans une classe une fonction en static, je pourrais accéder à cette fonction sans avoir à instancier ma classe ?
C'est ça ?

Mais dans quel but on pourrait avoir besoin d'accéder à une fonction d'une classe sans la déclarer ?

ViPHP
ViPHP | 1961 Messages

03 nov. 2006, 02:53

Re,
Un exemple très simpliste.

Dans une class tu déclares une constante, si dans une autre class tu as besoin de cette constante, tu n'as pas besoin d'instancier pour obtenir sa valeur.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 656 Messages

03 nov. 2006, 02:54

Aucune utilité selon moi. Je n'ai jamais utilisé cette mennière.

Eventuellement ça "pourrait" et c'est vraiment pas sûr, de pouvoir proposer une page à des personnes en leurs proposant d'utiliser la methode proceduriale et la mannière object.

Genre, par exemple, une classe de connexion MySQL.

ViPHP
ViPHP | 1961 Messages

03 nov. 2006, 02:59

Re,
Si j'ai bien compris sa question, c'est pas si c'est utili ou non. Mais à quoi sert cet opérateur.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

lézard
Invité n'ayant pas de compte PHPfrance

03 nov. 2006, 03:06

Oui, c'était ma question de départ, mais je voulais un peu approfondir.

Merci de vos réponses, amis pachydermes ;)

ViPHP
ViPHP | 1961 Messages

03 nov. 2006, 03:11

Re,
Personnellement je ne me sens pas en mesure de juger de son utilité, je dirais que l'utilité est fonction de la façon que l'on a de programmer.

C'est un peux comme si je disais à quoi sert 'print' si j'ai 'echo' ?

Mois je l'utilise entre autres pour la déclartion des constantes en lieu et place de define(). Mais chacun ses gouts.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 19672 Messages

03 nov. 2006, 08:38

Ah donc si je déclare dans une classe une fonction en static, je pourrais accéder à cette fonction sans avoir à instancier ma classe ?
C'est ça ?

Mais dans quel but on pourrait avoir besoin d'accéder à une fonction d'une classe sans la déclarer ?
C'est exactement ça. Et on utilise ça par exemple lorsqu'on utilise le pattern Singleton. Le principe du Sungleton est une méthode qui ne permet d'avoir qu'une seule instance d'une classe donnée. Pour ce faire, on a un constructeur privé : on ne peut donc pas appeler le constructeur depuis l'exétieur de la classe avec new : pour créer une instance de classe, il faut donc passer par une méthode statique qui va vérifier si une instance existe déjà et retourner cette instance ou bien la créer si elle n'existe pas.

Exemple à voir ICI
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

lézard
Invité n'ayant pas de compte PHPfrance

03 nov. 2006, 14:42

Merci pour le lien, c'est très bien expliqué.

J'ai pas encore d'idée d'utilisation précise, mais j'en ai compris le fonctionnement.

Merci à tous d'avoir éclairci ma question ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 2144 Messages

03 nov. 2006, 15:30

Un petit exemple d'usage des champs statiques pour compléter les exemples déja donnés:
Si on veut compter le nombre d'instance de la classe, on peut incrémenter un champ statique à chaque appel du contructeur de la classe.
(C'est peu comme si on avait une variable commune à toutes les instances)

lézard
Invité n'ayant pas de compte PHPfrance

05 nov. 2006, 18:38

Bonjour,

Merci pour vos exemple :)

J'ai une autre question, j'ai vu dans des classes :

Code : Tout sélectionner

class maclasse { ... static private function ma_fonction{ } .... }
Là je comprend pas bien, private, c'est seulement accessible à l'intérieur de cette même classe, dans ce cas pourquoi y mettre static ?