web-dev-qa-db-fra.com

Qu'est-ce que la variable $ this signifie en PHP?

Je vois la variable $this in PHP tout le temps et je ne sais pas à quoi il est utilisé. Je ne l’ai jamais utilisé personnellement, et les moteurs de recherche ignorent le $ et je me retrouve avec une recherche du mot "ceci".

Quelqu'un peut-il me dire comment la variable $ this fonctionne en PHP?

94
waiwai933

C'est une référence à l'objet actuel, il est le plus couramment utilisé dans le code orienté objet.

Exemple:

<?php
class Person {
    public $name;

    function __construct( $name ) {
        $this->name = $name;
    }
};

$jack = new Person('Jack');
echo $jack->name;

Ceci stocke la chaîne 'Jack' en tant que propriété de l'objet créé.

117
meder omuraliev

La meilleure façon de se renseigner sur le $this La variable php consiste à demander PHP ce que c'est. Ne nous demandez pas, demandez au compilateur:

print gettype($this);            //object
print get_object_vars($this);    //Array
print is_array($this);           //false
print is_object($this);          //true
print_r($this);                  //dump of the objects inside it
print count($this);              //true
print get_class($this);          //YourProject\YourFile\YourClass
print isset($this);              //true
print get_parent_class($this);   //YourBundle\YourStuff\YourParentClass
print gettype($this->container); //object
35
Eric Leschinski

Je connais sa vieille question, de toute façon une autre explication exacte à propos de $ this. $ this est principalement utilisé pour faire référence aux propriétés d'une classe.

Exemple:

Class A
{
   public $myname;    //this is a member variable of this class

function callme() {
    $myname = 'function variable';
    $this->myname = 'Member variable';
    echo $myname;                  //prints function variable
    echo $this->myname;              //prints member variable
   }
}

sortie:

function variable

member variable
14
loyola

C'est le moyen de référencer une instance d'une classe à partir de l'intérieur même, comme de nombreux autres langages orientés objet.

De la documentation PHP :

La pseudo-variable $ this est disponible lorsqu'une méthode est appelée depuis un contexte d'objet. $ this 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 à partir du contexte d'un objet secondaire).

8
snicker

Voyons ce qui se passe si nous n'utilisons pas $ this et essayons d'avoir des variables d'instance et des arguments de constructeur avec le même nom avec l'extrait de code suivant.

<?php

class Student {
    public $name;

    function __construct( $name ) {
        $name = $name;
    }
};

$tom = new Student('Tom');
echo $tom->name;

?>

Ça ne fait écho que

<?php

class Student {
    public $name;

    function __construct( $name ) {
        $this->name = $name; // Using 'this' to access the student's name
    }
};

$tom = new Student('Tom');
echo $tom->name;

?>

cela fait écho 'Tom'

6
user6485832

$this est ne 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 à partir du contexte d'un objet secondaire).

3
Seyedan

lorsque vous créez une classe, vous avez (dans de nombreux cas) des variables d'instance et des méthodes (fonctions aka). $ this accède à ces variables d'instance afin que vos fonctions puissent les utiliser et faire ce dont elles ont besoin pour en faire ce que vous voulez.

une autre version de l'exemple de meder:

class Person {

    protected $name;  //can't be accessed from outside the class

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}
// this line creates an instance of the class Person setting "Jack" as $name.  
// __construct() gets executed when you declare it within the class.
$jack = new Person("Jack"); 

echo $jack->getName();

Output:

Jack
3
cp3

$ Ceci est une variable spéciale et fait référence au même objet, c'est-à-dire. lui-même.

il fait effectivement référence à une instance de la classe en cours

voici un exemple qui effacera la déclaration ci-dessus

<?php
 class Books {
  /* Member variables */
  var $price;
  var $title;

  /* Member functions */
  function setPrice($par){
     $this->price = $par;
  }

  function getPrice(){
     echo $this->price ."<br/>";
  }

  function setTitle($par){
     $this->title = $par;
  }

  function getTitle(){
     echo $this->title ." <br/>";
  }
}
?> 
2
homi

Il fait référence à l'instance de la classe actuelle, comme meder dit.

Voir le Docs PHP . C'est expliqué dans le premier exemple.

0
Marc W