Ich sehe die Variable $this
in PHP und ich habe keine Ahnung, wofür es verwendet wird. Ich habe es nie persönlich benutzt.
Kann mir jemand sagen, wie die Variable $this
funktioniert in PHP?
waiwai933
Ich sehe die Variable $this
in PHP und ich habe keine Ahnung, wofür es verwendet wird. Ich habe es nie persönlich benutzt.
Kann mir jemand sagen, wie die Variable $this
funktioniert in PHP?
meder omuraliev
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.
Ähnlichen Beispielcode im KillerPHP-OOP-Tutorial gesehen 🙂 killerphp.com/tutorials/php-objects-page-1
– Edson
7. Januar 2017 um 8:59 Uhr
Schöne und einfache Erklärung. @meder omuraliev
– Kuchen
22. Juli 2019 um 15:52 Uhr
Erich Leschinski
$this
Variable in PHP ist es, es gegen den Interpreter in verschiedenen Kontexten zu versuchen: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 ->
Also die $this
Pseudo-Variable hat die Methoden und Eigenschaften des aktuellen Objekts. So etwas ist nützlich, weil Sie damit auf alle Member-Variablen und Member-Methoden innerhalb der Klasse zugreifen können. Zum Beispiel:
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 anrufen $this
innerhalb einer normalen Methode in einer normalen Klasse, $this
gibt das Objekt (die Klasse) zurück, zu dem diese Methode gehört.
Es ist möglich für $this
undefiniert sein, wenn der Kontext kein übergeordnetes Objekt hat.
php.net hat eine große Seite, die über die objektorientierte PHP-Programmierung spricht und wie $this
verhält sich kontextabhängig.
https://www.php.net/manual/en/language.oop5.basic.php
Tolle Erklärung. Ich möchte nur hinzufügen, dass $this als Pseudoobjekt/-variable behandelt werden kann, die beim Zugriff auf die Eigenschaften der aktuellen Klasse hilft.
– S.Alvi
25. Dezember 2019 um 7:22 Uhr
Loyola
Ich kenne seine alte Frage, jedenfalls eine andere genaue Erklärung dazu $das. $das wird hauptsächlich verwendet, um auf Eigenschaften einer Klasse zu verweisen.
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
}
}
Ausgang:
function variable
member variable
Auf diese Weise kann auf eine Instanz einer Klasse von sich selbst aus verwiesen werden, genau wie in vielen anderen objektorientierten Sprachen.
Von dem PHP-Dokumente:
Die Pseudovariable $this ist verfügbar, wenn eine Methode aus einem Objektkontext aufgerufen wird. $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).
Benutzer6485832
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 aber wider
<?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;
?>
das erinnert an ‘Tom’
Ihre Code-Snippets sind beide genau gleich, oder übersehe ich etwas?
– Demenz
19. Juni 2016 um 15:40 Uhr
@Demento: Ja. Ich habe es behoben, mit $this
im zweiten Konstruktor.
– Axel Guilmin
19. Juni 2016 um 17:01 Uhr
Würden Sie bitte erklären, warum name = $name mir nicht erlaubt, auf den Namen des Schülers zuzugreifen? Es ergibt für mich keinen Sinn.
– Marco Floriano
9. November 2019 um 13:46 Uhr
Mario, es liegt am Umfang. innerhalb der Funktion $name
ist Tom, aber außerhalb der Funktion hat es keinen Wert, da sein Gültigkeitsbereich auf den der Funktion beschränkt ist.
– Liebesina
24. Mai 2020 um 15:33 Uhr
cp3
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 nehmen und tun können, was sie tun müssen, 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
Ihre Code-Snippets sind beide genau gleich, oder übersehe ich etwas?
– Demenz
19. Juni 2016 um 15:40 Uhr
@Demento: Ja. Ich habe es behoben, mit $this
im zweiten Konstruktor.
– Axel Guilmin
19. Juni 2016 um 17:01 Uhr
Würden Sie bitte erklären, warum name = $name mir nicht erlaubt, auf den Namen des Schülers zuzugreifen? Es ergibt für mich keinen Sinn.
– Marco Floriano
9. November 2019 um 13:46 Uhr
Mario, es liegt am Umfang. innerhalb der Funktion $name
ist Tom, aber außerhalb der Funktion hat es keinen Wert, da sein Gültigkeitsbereich auf den der Funktion beschränkt ist.
– Liebesina
24. Mai 2020 um 15:33 Uhr
Dies ist eine lange detaillierte 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 schließende PHP-Tag weglassen ?>
wenn Sie nur PHP-Code verwenden.
Jetzt fügen wir 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 den Namen Eigenschaft, weil sie sich innerhalb einer Klasse befindet.
Die Methode ist nur eine einfache Funktion , aber wir sagen Methode, weil sie sich auch innerhalb einer Klasse befindet.
Die public
Schlüsselwort bedeuten, dass auf die Methode oder eine Eigenschaft überall im Skript zugegriffen werden kann.
Nun, wie wir die Eigenschaften und die Methode darin verwenden können Class1
?
Die Antwort ist das Erstellen einer Instanz oder eines Objekts, stellen Sie sich ein Objekt als eine 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 ist $object1
das ist eine Kopie von Class1
mit all seinen Inhalten. Und wir haben den gesamten Inhalt abgeladen $object1
verwenden var_dump()
.
Dies wird Ihnen geben
object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }
Also alle Inhalte von Class1
sind in $object1
außer Method1
ich weiß nicht, warum Methoden beim Dumping von Objekten nicht angezeigt werden.
Was nun, wenn wir zugreifen wollen $property1
nur. Es ist einfach, wir tun es var_dump($object1->property1);
haben wir gerade hinzugefügt ->property1
wir haben darauf hingewiesen.
wir können auch zugreifen Method1()
tun wir var_dump($object1->Method1());
.
Angenommen, ich möchte zugreifen $property1
von innen 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 kreierten $object2 = new Class1;
das ist eine neue Kopie von Class1
oder wir können eine Instanz sagen. Dann zeigten wir auf property1
von $object2
return $object2->property1;
Dies wird gedruckt string(15) "I am property 1"
im Browser.
Anstatt das jetzt drinnen zu tun Method1()
$object2 = new Class1;
return $object2->property1;
Wir machen das
return $this->property1;
Die $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 erstellt, die ganze Zahlen enthalten, und dann haben wir sie hinzugefügt und das Ergebnis eingefügt $this->result
.
Vergiss das nicht
$this->property1
= $property1
= 119
sie haben denselben Wert .. usw
Ich hoffe, das erklärt die Idee.
Diese Videoserie wird Ihnen bei OOP sehr helfen
https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv