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?
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éé.
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
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
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).
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'
$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).
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
$ 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/>";
}
}
?>
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.