2010-12-05 28 views
0

Possible en double:
PHP: self vs this et When to use self over $thisPHP: Ceci et auto

Quelle est la différence entre $this et self::

exemple:

class Object{ 
    public $property; 
    function doSomething(){ 
     // This 
     $something = $this->property; 
     // Self 
     $something = self::property; 
     ...code... 
    } 
} 
+0

duper exacte: http://stackoverflow.com/questions/151969/php-self-vs-this – Trufa

Répondre

3

$this fait référence à l'instance de l'objet, tandis que self retourne à la classe elle-même. Lorsque vous utilisez des appels statiques, vous faites référence à self parce que vous n'êtes pas obligé d'avoir une instance d'une classe (c'est-à-dire $this).

+0

Juste mentionner: 'self' est un mot-clé et non un variable. – KingCrunch

+0

@KingCrunch, Merci, je suis devenu fou quand j'ai posté mes réponses. –

2

$this référence l'objet, dans lequel le code apparaît, self est la classe. Vous appelez les méthodes et les propriétés « habituelles » avec $this depuis toute méthode et que vous appelez des méthodes et des propriétés statiques avec self

class A { 
    public static $staticVar = 'abc'; 
    public $var = 'xyz'; 
    public function doSomething() { 
     echo self::$staticVar; 
     echo $this->var; 
    } 
} 

Votre « Self » -example est invalide de toute façon.

+0

Soyez prudent avec 'self'. 'self' fait référence à la classe la plus récente de la chaîne qui contient cette méthode. Si vous avez une propriété statique '$ name' dans' ParentClass' et 'ChildClass' qui contiennent respectivement" Parent "et" Child ", mais' showName', qui utilise 'self :: $ name', n'existe que dans' ' ParentClass' puis '$ child-> showName()' retourneront 'Parent' pas' Child'. – AgentConundrum

+0

Habituellement c'est le comportement préféré, quand 'self' signifie vraiment" la classe elle-même "et pas n'importe quelle sous-classe. Utilisez "Late Static Binding" (statique), qui fait toujours référence à la classe appelée à la place. – KingCrunch

1

glanées ici

Lien: http://www.phpbuilder.com/board/showthread.php?t=10354489:

Utilisez $ this pour faire référence à l'objet courant. Utilisez self pour faire référence à la classe actuelle . En d'autres termes, utilisez $ this-> member pour les membres non-statiques, use self :: $ member pour les membres statiques.

Répondu par John Millikin here