Selon VS. ceci en php

Selon VS. ceci en php

PHP prend en charge les classes et autres constructions orientées objet. Les fonctions et variables statiques dans les classes PHP ne sont associées à aucune instance spécifique de la classe (en d'autres termes, un objet). Voir la différence entre objet et classe.

Au lieu de cela, les fonctions et variables statiques sont associées à la définition de classe elle-même. En d'autres termes, tous les cas d'une classe partagent la même variable statique. Dans le contexte d'une méthode (fonction) d'une classe, les variables et fonctions statiques sont accessibles en utilisant soi::. D'autres méthodes et variables sont utilisées dans le contexte d'un objet (une instance) d'une classe, en utilisant ce->.

Tableau de comparaison

Self contre ce tableau de comparaison
soice
Peut être utilisé dans les fonctions statiques Oui Non
Variable de classe accessible et méthodes avec soi:: $ this-> (notez que php> 5.3 Permet l'utilisation de $ ceci avec des variables statiques Utiliser $ this :: $ foo. $ this-> foo ne sera toujours pas défini si $ foo est un var statique.)
A besoin d'un objet instancié Non Oui

Self vs ceci dans PHP - Exemples

classe exampleclass public static $ foo; public $ bar; Fonction publique régulièreFunction () echo $ this-> bar;  Fonction statique publique staticFunction () echo self :: $ foo;  fonction statique publique AnothersTatfn () self :: staticFunction ();  Fonction publique régulièreFnUSingStaticVar () echo self :: $ foo;  // Remarque: à partir de PHP 5.3 Utilisation de $ ceci :: $ Bar au lieu de soi :: $ Bar est autorisé exampleclass :: $ foo = "Bonjour"; $ obj = new ExampleClass (); $ obj-> bar = "monde!"; exampleclass :: staticFunction (); / * imprime bonjour * / $ obj-> régulièrement (); / * imprime le monde! * / 

Les fonctions statiques ne peuvent utiliser que des variables statiques. Les fonctions et variables statiques sont référencées via soi::functionName () ou soi::Nom de variable. Dans l'exemple indiqué ci-dessus, les variables statiques sont référencées avec le nom de classe (exampleclass :: $ foo) ou, avec un soi:: (self :: $ foo) lorsqu'il est utilisé dans la méthode statique [nommé staticFunction ()] de la classe.

Les fonctions régulières et les variables d'une classe ont besoin d'un contexte d'objet à référencer. Ils ne peuvent exister sans contexte d'objet. Le contexte de l'objet est fourni par $ ceci. Dans l'exemple ci-dessus, $ bar est une variable régulière et il est donc référencé comme $ obj-> bar (dans le contexte de l'objet avec une variable obj) ou comme $ this-> bar (encore dans un contexte d'objet dans une méthode d'un objet).

soi n'utilise pas de précédent $ parce que soi ne connote pas une variable mais la classe se construit elle-même. $ ceci fait référence à une variable spécifique afin qu'il ait un précédent $.