Antworten:
Es ist eine Referenz auf das aktuelle Objekt und wird am häufigsten in objektorientiertem Code verwendet.
Beispiel:
<?php
class Person {
public $name;
function __construct( $name ) {
$this->name = $name;
}
};
$jack = new Person('Jack');
echo $jack->name;
Dadurch wird die Zeichenfolge 'Jack' als Eigenschaft des erstellten Objekts gespeichert.
$this
Variable in PHP zu erfahren, besteht darin, sie in verschiedenen Kontexten gegen den Interpreter zu testen: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 ->
Die $this
Pseudovariable hat also die Methoden und Eigenschaften des aktuellen Objekts. So etwas ist nützlich, weil Sie damit auf alle Mitgliedsvariablen und Mitgliedsmethoden innerhalb der Klasse zugreifen können. Beispielsweise:
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
ist ein Verweis auf ein PHP Object
, das vom Interpreter für Sie erstellt wurde und ein Array von Variablen enthält.
Wenn Sie $this
innerhalb einer normalen Methode in einer normalen Klasse aufrufen , wird $this
das Objekt (die Klasse) zurückgegeben, zu dem diese Methode gehört.
Es ist möglich $this
, undefiniert zu sein, wenn der Kontext kein übergeordnetes Objekt hat.
php.net hat eine große Seite, die über objektorientierte PHP-Programmierung und das Verhalten $this
je nach Kontext spricht .
https://www.php.net/manual/en/language.oop5.basic.php
Ich kenne seine alte Frage, jedenfalls eine weitere genaue Erklärung dazu . $ Dies wird hauptsächlich verwendet, um Eigenschaften einer Klasse zu referenzieren.
Beispiel:
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
}
}
Ausgabe:
function variable
member variable
Dies ist die Möglichkeit, eine Instanz einer Klasse aus sich heraus zu referenzieren, genau wie viele andere objektorientierte Sprachen.
Aus den PHP-Dokumenten :
Die Pseudovariable $ this ist verfügbar, wenn eine Methode aus einem Objektkontext heraus aufgerufen wird. $ Dies ist eine Referenz auf das aufrufende Objekt (normalerweise das Objekt, zu dem die Methode gehört, aber möglicherweise ein anderes Objekt, wenn die Methode statisch aus dem Kontext eines sekundären Objekts aufgerufen wird).
Mal sehen, was passiert, wenn wir $ this nicht verwenden und versuchen, Instanzvariablen und Konstruktorargumente mit demselben Namen mit dem folgenden Codeausschnitt zu haben
<?php
class Student {
public $name;
function __construct( $name ) {
$name = $name;
}
};
$tom = new Student('Tom');
echo $tom->name;
?>
Es hallt nichts als
<?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;
?>
dies spiegelt "Tom" wider
$this
dem zweiten Konstruktor behoben .
$name
befindet sich Tom, außerhalb der Funktion hat sie jedoch keinen Wert, da ihr Umfang auf den der Funktion beschränkt ist.
Wenn Sie eine Klasse erstellen, haben Sie (in vielen Fällen) Instanzvariablen und -methoden (auch bekannt als. Funktionen). $ this greift auf diese Instanzvariablen zu, damit Ihre Funktionen diese Variablen übernehmen und das tun können, was sie benötigen, um mit ihnen zu tun, was Sie wollen.
eine andere Version von Meders Beispiel:
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
ist eine Referenz auf das aufrufende Objekt (normalerweise das Objekt, zu dem die Methode gehört, aber möglicherweise ein anderes Objekt, wenn die Methode statisch aus dem Kontext eines sekundären Objekts aufgerufen wird).
$ Dies ist eine spezielle Variable und bezieht sich auf dasselbe Objekt, dh. selbst.
es verweist tatsächlich auf eine Instanz der aktuellen Klasse
Hier ist ein Beispiel, das die obige Aussage verdeutlicht
<?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/>";
}
}
?>
Dies ist eine lange ausführliche Erklärung. Ich hoffe das hilft den Anfängern. Ich werde es sehr einfach machen.
Zuerst erstellen wir eine Klasse
<?php
class Class1
{
}
Sie können das PHP-Closing-Tag weglassen, ?>
wenn Sie nur PHP-Code verwenden.
Fügen wir nun Eigenschaften und eine Methode hinzu Class1
.
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
return "I am Method 1";
}
}
Die Eigenschaft ist nur eine einfache Variable, aber wir geben ihr die Namenseigenschaft, da sie innerhalb einer Klasse liegt.
Die Methode ist nur eine einfache Funktion, aber wir sagen, dass die Methode auch innerhalb einer Klasse liegt.
Das public
Schlüsselwort bedeutet, dass auf die Methode oder eine Eigenschaft an einer beliebigen Stelle im Skript zugegriffen werden kann.
Wie können wir nun die Eigenschaften und die Methode im Inneren verwenden Class1
?
Die Antwort ist das Erstellen einer Instanz oder eines Objekts. Stellen Sie sich ein Objekt als Kopie der Klasse vor.
<?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);
Wir haben ein Objekt erstellt, das $object1
eine Kopie Class1
mit allen Inhalten ist. Und wir haben den gesamten Inhalt der $object1
Verwendung abgeladen var_dump()
.
Das wird dir geben
object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }
Der gesamte Inhalt von Class1
ist in $object1
, außer Method1
ich weiß nicht, warum Methoden beim Dumping von Objekten nicht angezeigt werden.
Was ist nun, wenn wir $property1
nur darauf zugreifen möchten? Es ist einfach, wir tun es var_dump($object1->property1);
, wir haben gerade hinzugefügt ->property1
, wir haben darauf hingewiesen.
wir können auch den Zugang Method1()
, was wir tun var_dump($object1->Method1());
.
Angenommen, ich möchte $property1
von innen darauf zugreifen Method1()
, ich werde dies tun
<?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());
Wir haben $object2 = new Class1;
eine neue Kopie erstellt Class1
oder wir können eine Instanz sagen. Dann zeigten wir auf property1
von$object2
return $object2->property1;
Dies wird string(15) "I am property 1"
im Browser gedruckt .
Jetzt anstatt dies drinnen zu tun Method1()
$object2 = new Class1;
return $object2->property1;
Wir machen das
return $this->property1;
Das $this
Objekt wird innerhalb der Klasse verwendet, um auf die Klasse selbst zu verweisen.
Es ist eine Alternative, um ein neues Objekt zu erstellen und es dann so zurückzugeben
$object2 = new Class1;
return $object2->property1;
Ein anderes Beispiel
<?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());
Wir haben 2 Eigenschaften mit ganzen Zahlen erstellt und diese dann hinzugefügt und das Ergebnis eingegeben $this->result
.
Vergiss das nicht
$this->property1
= $property1
=119
sie haben den gleichen Wert .. etc.
Ich hoffe das erklärt die Idee.
Diese Reihe von Videos wird Ihnen in OOP sehr helfen
https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv
Es bezieht sich auf die Instanz der aktuellen Klasse, wie Meder sagte.
Siehe die PHP-Dokumente . Es wird unter dem ersten Beispiel erklärt.