2010-09-12 7 views
2

Je l'ai vu quelques scripts contiennent $this dans un script PHP qui a POO, je ne savais pas le sens de celui-ci ... comme

$this->refresh(); 

Peut-être me expliquer ce $this se réfère à être ...?

Mais je sais que vous ne pouvez pas l'utiliser comme variable dynamique comme $this_is_a_variable mais pourquoi ne pas l'utiliser comme variable dynamique?

+0

http://stackoverflow.com/questions/2094052/how-to-explain-this-keyword-in-a-best-and-simple-way – NAVEED

Répondre

18

$this est une référence à l'objet actuel.

Il peut être utilisé uniquement dans les méthodes de classe.

De the manual:

Le pseudo $ variable c'est disponible lorsqu'une méthode est appelée dans un contexte d'objet. $ ceci est une référence à l'objet appelant (généralement l'objet auquel appartient la méthode, mais éventuellement un autre objet, si la méthode est appelée de manière statique dans le contexte d'un objet secondaire).

un exemple concret simple:

class Classname 
{ 
    public $message = "The big brown fox... jumped...."; 

    function showMessage() 
    { 
     echo $this->message; // Will output whatever value 
          // the object's message variable was set to 
    } 
    } 

$my_object = new Classname(); // this is a valid object 
$my_object->name = "Hello World!"; 
$my_object->showMessage(); // Will output "Hello world" 

$this est pas lorsque vous appelez une méthode dans un contexte statique :

Classname::showMessage(); // Will throw an error: 
          // `$this` used while not in object context 
+0

Eh bien, c'était une réponse assez rapide Pekka: P I ' ll a lu le manuel, je ne savais pas où trouver à propos de '$ this' dans le manuel PHP/Documentation. Merci. : D – MacMac

+3

Je suis sûr que showMessage affichera "Le gros renard brun ... a sauté ..." au lieu de "Hello World!".Vous vouliez probablement dire $ my_object-> message – luiscubal

+2

l'utilisation de 'var' devrait être remplacée par 'private' ou même 'protected' pour les membres de la classe. (Voir http://www.php.net/manual/en/language.oop5.properties.php) –

4

si vous faites POO alors vous utilisez des classes. Vous pouvez avoir:

class CFoo 
    { 
    private $var; 
    public function setFoo($fooVal) 
    { 
    $this->var = $fooVal; 
    } 
    } 

$ ceci fait référence à l'objet courant de cette classe.

3

Lors de la création de classes dans PHP, vous devrez peut-être parfois référencer la classe * elle-même. La variable $this est réservée à cet effet.

** Ceci devrait être correct car 'se référant à l'objet créé' n'est pas la classe. Ceci est sémantiquement plus correct *

Par exemple:.

class Car 
{ 
    private $make; 

    public function setMake($make) 
    { 
     $this->make = $make; 
    } 

    public function setModel($model) 
    { 
     $this->model = $model; 
    } 

    public function whatCar() 
    { 
     return "This car is a " . $this->make . " " . $this->model; 
    } 
} 

Et pour l'utiliser ressemblerait à quelque chose comme:

$car = new Car(); 

$car->setMake('Ford'); 
$car->setModel('Escort'); 

echo $car->whatCar(); 
//This car is a Ford Escort 
+3

Je me rends compte que je suis en train de cogner ici, mais '$ this' fait référence à un * objet * de la classe donnée. Pour se référer à la * classe * elle-même, la constante magique «__CLASS__» est utilisée. – BoltClock

+0

Je vous en ai plus pour mon erreur. Je vais laisser l'erreur pour référence, mais vous avez raison. – Glycerine

0

$ this se réfère à l'objet actuel de la classe. $ this est utilisé dans les méthodes qui sont membres d'une classe particulière. Par conséquent, à l'intérieur de ces méthodes, la méthode a déjà l'information sur l'instance particulière de cette classe. Donc $ this peut être directement utilisé pour référencer l'objet actuel, plutôt que de récupérer et d'assigner un objet à une variable différente.

Questions connexes