Accueil > Forum > > > > Méthodes statiques
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
|
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
|
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
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|