PHP supporte les classes et autres constructions orientées objet. Les fonctions statiques et les variables dans les classes PHP ne sont associées à aucune instance spécifique de la classe (autrement dit, un objet). Voir la différence entre objet et classe.
Au lieu de cela, les fonctions et les variables statiques sont associées à la définition de classe elle-même. En d'autres termes, toutes les instances d'une classe partagent la même variable statique. Dans le contexte d’une méthode (fonction) d’une classe, on accède aux variables et aux fonctions statiques à l’aide de soi::
. D'autres méthodes et variables sont utilisées dans le contexte d'un objet (une instance) d'une classe, en utilisant ceci->
.
soi | ce | |
---|---|---|
Peut être utilisé dans des fonctions statiques | Oui | Non |
variable de classe accessible et méthodes avec | soi:: | $ this-> (Notez que PHP> 5.3 permet l'utilisation de $ this avec des variables statiques, utilisez $ this :: $ foo. $ this-> foo sera toujours indéfini si $ foo est une variable statique.) |
Besoin d'un objet instancié | Non | Oui |
class exampleClass public static $ foo; bar public $; fonction publique regularFunction () echo $ this-> bar; fonction statique publique staticFunction () echo self :: $ foo; fonction statique publique anotherStatFn () self :: staticFunction (); fonction publique regularFnUsingStaticVar () echo self :: $ foo; // NOTE: A partir de PHP 5.3, utiliser $ this :: $ bar à la place de self :: $ bar est autorisé exampleClass :: $ foo = "Hello"; $ obj = new exampleClass (); $ obj-> bar = "World!"; exampleClass :: staticFunction (); / * affiche Bonjour * / $ obj-> regularFunction (); / * affiche le monde! * /
Les fonctions statiques ne peuvent utiliser que des variables statiques. Les fonctions statiques et les variables sont référencées via soi::functionName () ou soi::Nom de variable. Dans l'exemple ci-dessus, les variables statiques sont référencées avec le nom de la classe (exampleClass :: $ foo) ou, avec soi:: (self :: $ foo) lorsqu'il est utilisé dans la méthode statique [nommé staticFunction ()] de la classe.
Les fonctions normales et les variables d'une classe ont besoin d'un contexte d'objet pour être référencées. Ils ne peuvent pas exister sans un contexte d'objet. Le contexte de l'objet est fourni par $ this. Dans l'exemple ci-dessus, $ bar est une variable régulière. Elle est donc référencée sous la forme $ obj-> bar (dans le contexte de l'objet avec variable obj) ou comme $ this-> bar (encore une fois dans un contexte d'objet dans une méthode d'objet).
soi n'utilise pas un précédent $ parce que soi ne connote pas une variable mais la classe se construit. $ this fait référence à une variable spécifique de sorte qu'il a un précédent $.