begin process at 2012 05 31 03:47:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

Méthodes statiques


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Méthodes statiques

mercredi 12 juillet 2006 à 08:38:27 | Méthodes statiques

mentral

Bonjour.

Voici une question d'ordre général : à quoi servent les méthodes statiques en php ? N'étant pas sûr du terme, en voici un exemple :

maClasse::maMéthode()


J'ai l'habitude d'utiliser mes classes de la façon suivante : maClasse->maMéthode() après une instanciation. Où se situe la différence ? Et surtout, quel est l'intérêt des méthodes statiques mis à part le fait de "gagner une ligne" de code en omettant l'instanciation ? Dans quel cas sont-elles les bienvenues par rapport aux méthodes dynamiques ?

Je me pose cette question depuis que je commence à lire le code de frameworks et de CMS opensource existants ; c'est là que j'ai découvert cette syntaxe.

Merci.

[ NemetraL ]


mercredi 12 juillet 2006 à 09:26:14 | Re : Méthodes statiques

PaDa

Membre Club
J'espère que je ne vais pas dire de bêtise, mais :

Une méthode statique s'appelle (et est propre) à une classe, non à un objet.
La question n'est pas de gagner une instanciation, c'est juste que ca ne sert pas à la même chose :

Exemple : tu as une classe "Poulet", et une méthode statique "denombrerPoulailler", avec un attribut statique "nbrePoulets"
A chaque instanciation, tu incrémenteras "nbrePoulets", de facon à ce que "Poulet::denombrerPoulailler" te permette de connaitre le nombre de "Poulet"(s) qui ont été instanciés.

Ce genre de truc te permet de garder des propriétés utiles à ta classe et non à un objet, ca évite de faire des trucs tordus pour instancier un objet à coté qui garderait en mémoire la population du poulailler..

J'espère avoir pu t'aider un peu, cdt,

Pada
mercredi 12 juillet 2006 à 09:27:13 | Re : Méthodes statiques

davwart

Si c'est comme en c++ (et je pense que ça l'est), une methode statique peu s'appelle meme si tu n'as pas defini d'objet de ta classe.

par exemple imagine une classe String
prenons une methde statique IntToString(int) qui convertit un int en string

pour eviter que tu doives faire
int a=150;
s=new String;
s=s->IntToSTring(a);

tu peux mettre ta méthode en statique et faire directement : String::IntToString(a);
ca t'evite d'initialiser un object de type String pour utiliser ta méthode.


-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
mercredi 12 juillet 2006 à 11:07:19 | Re : Méthodes statiques

mentral

Merci de vos réponses.

Quelle distinction peut-on faire entre un objet et une classe ? L'objet est-il l'expression ponctuelle d'une classe ?
Je commence à mieux saisir la distinction, mais ne parviens pas à me décider entre statique et dynamique pour coder les composants d'un mini framework.
Exemple : les classes générales du framework (détermination de l'action à exécuter, etc.) peuvent être codées en statique, et les modèles de données en dynamique (ref au MVC) ? Quelle est la limite des méthodes statiques ?

Merci.

[ NemetraL ]


mercredi 12 juillet 2006 à 11:24:23 | Re : Méthodes statiques

PaDa

Membre Club
Chien est une classe, mais Médor, qui est une instance de Chien, est un objet :)

Enfin, il y a beaucoup d'abus de langages en POO : on devrait dire attribut / opération quand on parle de la classe, et champ / méthode quand on parle de l'objet. Cependant, on utilise souvent attribut et méthodes pour les deux..
(je n'ai qu'une petite expérience de la POO, par mon cours de Java, si qq1 veut me corriger, qu'il n'hésite pas ;))

Pada

mercredi 12 juillet 2006 à 12:39:12 | Re : Méthodes statiques

Guillemouze

Réponse acceptée !
tout a fait d'accord PaDa, sauf pour les denomination dont je n'ai aucune idée.

On peut assimiler une classe à un modele. L'exemple des poules qui ma bcp fait rire, mais je vais plutot prendre les hommes. On peut voir la chose comme ca:


un homme est caracterisé par:
    Couleur de cheveux,
    Couleur des yeux,
    taille,
    sexe,
    ...


l'interet de creer une classe pour les hommes, c'est que tu as beaucoup d'hommes et qu'ils ont tous une couleur de cheveux, ..., mais ce n'est pas tous la meme.
L'autre interet, c'est que tu peu y ajouter des methodes propres aux hommes, comme par exemple une fonction grand() qui te retourne si l'homme est grand, mais l'implementation est unique a tous les hommes.
Encore un autre interet est l'heritage. tu peu creer 2 autres classes Male et Femelle qui heritent de homme, et qui auront donc une couleur de cheveux, ... sans que tu ai besoin de les redeclarer. Et tu peu en plus ajouter d'autres champs/methodes tels que CouleurRougeALevre, ...

Pour resumer, les classes sont utiles si tu doit instancier plusieurs objets d'un meme modele, ou des objets dont le modele est l'extension d'un autre.
Les fonctions statiques (pas statiques de classe mais statique unique, c'est a dire propre a aucune classe) sont utiles pour des traitements simples independants d'objets. par exemple, une fonction "Carre" qui met un nombre au carre n'a rien a faire dans une classe, ou alors dans une classe "Math", juste pour la lisibilité.

j'espere t'avoir eclairé plus qu'embrouillé ;)
mercredi 12 juillet 2006 à 13:18:56 | Re : Méthodes statiques

FhX

Réponse acceptée !
http://fr3.php.net/manual/fr/language.oop5.static.php "The difference between static and non static members is only that a non static member is tied to an instance of a class although a static member is tied to the class, and not to a particular instance. That is, a static member is shared by all instances of a class although a non static member exists for each instance of class." Autrement dit, une propriété statique est commune à TOUTES LES INSTANCES DE CLASSE. Imaginons ceci : a++; } } $obj = new x; $obj2 = new x; $obj->plus_un(); echo 'a : '.$obj->a.' - z : '.x::$z; // Affiche : 'a : 1 - z : 1'; $obj2->plus_un(); echo 'a : '.$obj->a.' - z : '.x::$z; // Affiche : 'a : 1 - z : 2'; ?> Pour tenter de faire encore plus clair, disons qu'une propriété statique est en quelque sorte une variable globale entre toutes les instances d'une même classe. Ca marche également pour les classes héritières : a++; parent::$z++; } } // Une autre classe concrète class a extends x { public function plus_un() { $this->a++; parent::$z++; } } $obj = new y; $obj2 = new a; $obj->plus_un(); echo 'a : '.$obj->a.' - z : '.x::$z; // Affiche : 'a : 1 - z : 1'; $obj2->plus_un(); echo 'a : '.$obj->a.' - z : '.x::$z; // Affiche : 'a : 1 - z : 2'; ?> Et pourtant, ce sont bien 2 instances différentes :) Voila entre autre une des forces de la programmation objet.
jeudi 13 juillet 2006 à 10:50:28 | Re : Méthodes statiques

mentral

Ok.

Merci bien pour vos réponses. J'aime bien le terme de "lisibilité" utilisé dans ton post, Guillemouze. Je crois que les frameworks que je parcours aiment bien rendre leur structure plus lisible, ou du moins organisée, en multipliant les classes à tout va sans instancier d'objet.

[ NemetraL ]


jeudi 13 juillet 2006 à 11:13:13 | Re : Méthodes statiques

Guillemouze

en plus de ca, ca te permet de declarer plusiuers fois la meme fonction
par exemple
    math.carre(x) // pour faire un nombre au carre
    geometrie.carre(x) // pour te creer x carres par exemple

mais bien sur ce n'est pas du tout le but de la prog objet, mais c pratique


Cette discussion est classée dans : question, méthodes, maclasse, statiques, maméthode


Répondre à ce message

Sujets en rapport avec ce message

heu...question pour un neophyte... [ par blackwizzard ] heu...comment on fait pour tester les script?sous quel extention?faut installer un logiciel particulier?si oui, on le trouve ou?merci à ceux qui eclai Question avec INCLUDE [ par CBF ] Bonjour,voila je vous expose mon problème :je vous donne l'arborescence d'une partit de mon site :ROOT :menu_gauche.php3 -> Mon menuindex.php3 Attention question pour les pros du php ! [ par Neozix ] Bonjour,Merci de m'accorder un peu de temps pour mon problème. Voici la bete-----------------------------------------------------include("includes/con petite question sur un script [ par oggy ] Salut !Je viens de trouver ce script concernant un moteur de recherche interne:Recherche : <input type="submit" va Une petite question sur les pages php [ par ian ] Faut-il toujours insérer le code php dans le body d'une page html qui a une extension .php, ou y-a-t-il un moyen de faire fonctionner une page de cod question formulaire [ par LoRdKiFlEx ] salutje suis en train de faire un script pour s'identifier et s'inscrire avec un page html il ya 2 champs : psuedo et mot de pass seulement quand je c question de gos newbie!!! [ par puppet ] salut tlm :)je suis un gros newbie en php et MySQL et jqi beau lire tout ce qui concerne le sujet sa rentre pas ma ptite tête! :)juste savoir ou je po Tutorial form de discussion [ par must ] Salut,cherche tutorial pour faire un forum de discussion,avec arborescence,et possibilité quand quelqu'un repond à une question,de prevenir celui qui question facil je pense [ par yomm ] voila a mon avis cette question va peut etre paraitre ridicule mais j'arrive pa a trouver la réponse alors voila je vous demande:je faide la prog en V Question pour la programmation en PHP et en javascript ... [ par LocalStone ] Ben voilà, je commence un peu à programmer, y a tout qui va bien, mais y a 2 symboles que je ne comprends pas, et je ne voit pas du tout à quoi ils se


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 8,549 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales