Réponses:
C'est une référence à l'objet courant, 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;
Cela stocke la chaîne «Jack» en tant que propriété de l'objet créé.
$this
variable en PHP est de l'essayer contre l'interpréteur dans divers contextes:print isset($this); //true, $this exists
print gettype($this); //Object, $this is an object
print is_array($this); //false, $this isn't an array
print get_object_vars($this); //true, $this's variables are an array
print is_object($this); //true, $this is still an object
print get_class($this); //YourProject\YourFile\YourClass
print get_parent_class($this); //YourBundle\YourStuff\YourParentClass
print gettype($this->container); //object
print_r($this); //delicious data dump of $this
print $this->yourvariable //access $this variable with ->
Ainsi, la $this
pseudo-variable a la méthode et les propriétés de l'objet courant. Une telle chose est utile car elle vous permet d'accéder à toutes les variables membres et méthodes membres de la classe. Par exemple:
Class Dog{
public $my_member_variable; //member variable
function normal_method_inside_Dog() { //member method
//Assign data to member variable from inside the member method
$this->my_member_variable = "whatever";
//Get data from member variable from inside the member method.
print $this->my_member_variable;
}
}
$this
est une référence à un PHP Object
qui a été créé par l'interpréteur pour vous, qui contient un tableau de variables.
Si vous appelez à l' $this
intérieur d'une méthode normale dans une classe normale, $this
renvoie l'Object (la classe) à laquelle appartient cette méthode.
Il est possible de ne $this
pas être défini si le contexte n'a pas d'objet parent.
php.net a une grande page sur la programmation orientée objet PHP et comment $this
se comporte en fonction du contexte.
https://www.php.net/manual/en/language.oop5.basic.php
Je connais sa vieille question, en tout cas une autre explication exacte à ce sujet . $ this est principalement utilisé pour référencer les 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
}
}
production:
function variable
member variable
C'est le moyen de référencer une instance d'une classe à partir de lui-même, comme beaucoup d'autres langages orientés objet.
À partir de la documentation PHP :
La pseudo-variable $ this est disponible lorsqu'une méthode est appelée à partir d'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 statiquement depuis le 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;
?>
Il 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
dans le deuxième constructeur.
$name
trouve Tom, mais à l'extérieur de la fonction, il n'a aucune valeur, car sa portée est limitée à celle de la fonction.
lorsque vous créez une classe, vous avez (dans de nombreux cas) des variables d'instance et des méthodes (aka. fonctions). $ this accède à ces variables d'instance afin que vos fonctions puissent prendre ces variables et faire ce dont elles ont besoin pour faire ce que vous voulez avec elles.
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
$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 statiquement depuis le contexte d'un objet secondaire).
$ ceci est une variable spéciale et fait référence au même objet ie. lui-même.
il fait en fait référence à l'instance de la classe actuelle
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/>";
}
}
?>
C'est une longue explication détaillée. J'espère que cela aidera les débutants. Je vais le rendre très simple.
Tout d'abord, créons une classe
<?php
class Class1
{
}
Vous pouvez omettre la balise de fermeture php ?>
si vous utilisez uniquement du code php.
Ajoutons maintenant des propriétés et une méthode à l'intérieur Class1
.
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
return "I am Method 1";
}
}
La propriété n'est qu'une simple variable, mais nous lui donnons le nom de propriété parce qu'elle est à l'intérieur d'une classe.
La méthode est juste une fonction simple, mais nous disons que la méthode est également à l'intérieur d'une classe.
Le public
mot-clé signifie que la méthode ou une propriété est accessible n'importe où dans le script.
Maintenant, comment pouvons-nous utiliser les propriétés et la méthode à l'intérieur Class1
?
La réponse est de créer une instance ou un objet, pensez à un objet comme une copie de la classe.
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
return "I am Method 1";
}
}
$object1 = new Class1;
var_dump($object1);
Nous avons créé un objet, qui est $object1
, qui est une copie de Class1
avec tout son contenu. Et nous avons vidé tout le contenu de l' $object1
utilisation var_dump()
.
Cela vous donnera
object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }
Donc, tout le contenu de Class1
est dans $object1
, sauf Method1
, je ne sais pas pourquoi les méthodes ne s'affichent pas lors du vidage d'objets.
Maintenant, que faire si nous voulons accéder $property1
uniquement. C'est simple, nous le faisons var_dump($object1->property1);
, nous venons d'ajouter ->property1
, nous l'avons souligné.
nous pouvons également accéder Method1()
, nous le faisons var_dump($object1->Method1());
.
Supposons maintenant que je veuille accéder $property1
de l'intérieur Method1()
, je vais le faire
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
$object2 = new Class1;
return $object2->property1;
}
}
$object1 = new Class1;
var_dump($object1->Method1());
nous avons créé $object2 = new Class1;
qui est une nouvelle copie de Class1
ou nous pouvons dire une instance. Ensuite, nous avons souligné property1
de$object2
return $object2->property1;
Cela s'imprimera string(15) "I am property 1"
dans le navigateur.
Maintenant au lieu de faire ça à l'intérieur Method1()
$object2 = new Class1;
return $object2->property1;
On fait ça
return $this->property1;
L' $this
objet est utilisé à l'intérieur de la classe pour faire référence à la classe elle-même.
C'est une alternative pour créer un nouvel objet puis le renvoyer comme ceci
$object2 = new Class1;
return $object2->property1;
Un autre exemple
<?php
class Class1
{
public $property1 = 119;
public $property2 = 666;
public $result;
public function Method1()
{
$this->result = $this->property1 + $this->property2;
return $this->result;
}
}
$object1 = new Class1;
var_dump($object1->Method1());
Nous avons créé 2 propriétés contenant des entiers, puis nous les avons ajoutées et avons mis le résultat dans $this->result
.
N'oublie pas ça
$this->property1
= $property1
=119
ils ont la même valeur .. etc.
J'espère que cela explique l'idée.
Cette série de vidéos vous aidera beaucoup en POO
https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv
Il fait référence à l'instance de la classe actuelle, comme l' a dit meder .
Consultez la documentation PHP . C'est expliqué dans le premier exemple.