Odpowiedzi:
Jest to odniesienie do bieżącego obiektu, jest najczęściej używane w kodzie zorientowanym obiektowo.
Przykład:
<?php
class Person {
public $name;
function __construct( $name ) {
$this->name = $name;
}
};
$jack = new Person('Jack');
echo $jack->name;
Spowoduje to zapisanie ciągu „Jacka” jako właściwości utworzonego obiektu.
$this
zmiennej w PHP jest wypróbowanie jej przeciwko interpreterowi w różnych kontekstach: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 ->
Więc $this
pseudozmienna ma metodę i właściwości Current Object. Taka rzecz jest przydatna, ponieważ umożliwia dostęp do wszystkich zmiennych składowych i metod składowych wewnątrz klasy. Na przykład:
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
jest odniesieniem do PHP, Object
które zostało stworzone przez interpreter dla Ciebie, które zawiera tablicę zmiennych.
Jeśli wywołasz $this
wewnątrz zwykłej metody w normalnej klasie, $this
zwraca Object (klasę), do której należy ta metoda.
Może $this
być niezdefiniowane, jeśli kontekst nie ma obiektu nadrzędnego.
php.net ma dużą stronę poświęconą programowaniu obiektowemu PHP i $this
zachowaniu w zależności od kontekstu.
https://www.php.net/manual/en/language.oop5.basic.php
Znam jego stare pytanie, w każdym razie inne dokładne wyjaśnienie dotyczące tego . $ this jest używane głównie do odwoływania się do właściwości klasy.
Przykład:
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
}
}
wynik:
function variable
member variable
Jest to sposób na odwołanie się do instancji klasy z jej wnętrza, tak samo jak w przypadku wielu innych języków obiektowych.
Z dokumentacji PHP :
Pseudozmienna $ this jest dostępna, gdy metoda jest wywoływana z kontekstu obiektu. $ this jest odwołaniem do obiektu wywołującego (zwykle jest to obiekt, do którego należy metoda, ale prawdopodobnie inny obiekt, jeśli metoda jest wywoływana statycznie z kontekstu drugiego obiektu).
Zobaczmy, co się stanie, jeśli nie użyjemy $ this i spróbujemy mieć zmienne instancji i argumenty konstruktora o tej samej nazwie z następującym fragmentem kodu
<?php
class Student {
public $name;
function __construct( $name ) {
$name = $name;
}
};
$tom = new Student('Tom');
echo $tom->name;
?>
Nie odbija się tylko echem
<?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;
?>
to echo „Tom”
$this
drugiego konstruktora.
$name
jest Tom, ale poza funkcją nie ma żadnej wartości, ponieważ jej zakres jest ograniczony do zakresu funkcji.
kiedy tworzysz klasę, masz (w wielu przypadkach) zmienne instancji i metody (inaczej funkcje). $ this uzyskuje dostęp do tych zmiennych instancji, dzięki czemu funkcje mogą pobierać te zmienne i robić z nimi co tylko zechcesz.
inna wersja przykładu medera:
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
jest odniesieniem do obiektu wywołującego (zwykle jest to obiekt, do którego należy metoda, ale prawdopodobnie inny obiekt, jeśli metoda jest wywoływana statycznie z kontekstu obiektu drugorzędnego).
$ to jest zmienna specjalna i odnosi się do tego samego obiektu, tj. samo.
faktycznie odwołuje się do instancji bieżącej klasy
oto przykład, który wyjaśni powyższe stwierdzenie
<?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/>";
}
}
?>
To jest długie szczegółowe wyjaśnienie. Mam nadzieję, że pomoże to początkującym. Uczynię to bardzo prostym.
Najpierw utwórzmy klasę
<?php
class Class1
{
}
Możesz pominąć tag zamykający php, ?>
jeśli używasz tylko kodu php.
Teraz dodajmy właściwości i metodę wewnątrz Class1
.
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
return "I am Method 1";
}
}
Właściwość jest zwykłą zmienną, ale nadajemy jej nazwę property, ponieważ znajduje się wewnątrz klasy.
Metoda jest po prostu prostą funkcją, ale mówimy o metodzie, ponieważ znajduje się ona również wewnątrz klasy.
Słowo public
kluczowe oznacza, że dostęp do metody lub właściwości można uzyskać w dowolnym miejscu skryptu.
Teraz, jak możemy wykorzystać właściwości i metodę wewnątrz Class1
?
Odpowiedzią jest utworzenie instancji lub obiektu, pomyśl o obiekcie jak o kopii klasy.
<?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);
Stworzyliśmy obiekt, który jest $object1
kopią Class1
z całą zawartością. I wyrzuciliśmy całą zawartość $object1
using var_dump()
.
To ci da
object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }
Więc cała zawartość Class1
znajduje się w $object1
, z wyjątkiem tego Method1
, że nie wiem, dlaczego metody nie są wyświetlane podczas zrzucania obiektów.
A co, jeśli chcemy $property1
tylko uzyskać dostęp . To proste, robimy var_dump($object1->property1);
, po prostu dodaliśmy ->property1
, wskazaliśmy na to.
mamy również dostęp Method1()
, robimy var_dump($object1->Method1());
.
Teraz przypuśćmy, że chcę uzyskać dostęp $property1
od wewnątrz Method1()
, zrobię to
<?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());
stworzyliśmy, $object2 = new Class1;
który jest nową kopią Class1
lub możemy powiedzieć, że jest instancją. Następnie wskazaliśmy property1
z$object2
return $object2->property1;
Spowoduje to wydrukowanie string(15) "I am property 1"
w przeglądarce.
Teraz zamiast robić to w środku Method1()
$object2 = new Class1;
return $object2->property1;
My to robimy
return $this->property1;
$this
Przedmiot jest używany wewnątrz klasy odnosi się do samej klasie.
Jest to alternatywa dla stworzenia nowego obiektu i zwrócenia go w ten sposób
$object2 = new Class1;
return $object2->property1;
Inny przykład
<?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());
Stworzyliśmy 2 właściwości zawierające liczby całkowite, a następnie dodaliśmy je i wstawiliśmy wynik $this->result
.
Nie zapomnij tego
$this->property1
= $property1
=119
mają tę samą wartość… itd
Mam nadzieję, że to wyjaśnia pomysł.
Ta seria filmów pomoże Ci bardzo w OOP
https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv
Odnosi się do wystąpienia obecnej klasy, jak powiedział meder .
Zobacz dokumentację PHP . Jest to wyjaśnione w pierwszym przykładzie.