Відповіді:
Це посилання на поточний об'єкт, він найчастіше використовується в об'єктно-орієнтованому коді.
Приклад:
<?php
class Person {
public $name;
function __construct( $name ) {
$this->name = $name;
}
};
$jack = new Person('Jack');
echo $jack->name;
Це зберігає рядок "Джек" як властивість створеного об'єкта.
$this
змінну в PHP - це спробувати її проти інтерпретатора в різних контекстах: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 ->
Отже, $this
псевдо-змінна має метод та властивості поточного об'єкта. Така річ корисна, оскільки дозволяє отримувати доступ до всіх змінних членів та методів членів всередині класу. Наприклад:
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
- це посилання на PHP Object
, створений для вас інтерпретатором, що містить масив змінних.
Якщо ви викликаєте $this
всередині звичайного методу в звичайному класі, $this
повертає Об'єкт (клас), до якого цей метод належить.
Не можна $this
визначити, якщо в контексті немає батьківського Об'єкта.
php.net має велику сторінку, де розповідається про об'єктно-орієнтоване програмування PHP та про те, як $this
поводиться залежно від контексту.
https://www.php.net/manual/en/language.oop5.basic.php
Я знаю його давнє запитання, інакше ще одне точне пояснення щодо $ цього . $ це в основному використовується для позначення властивостей класу.
Приклад:
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
}
}
вихід:
function variable
member variable
Це спосіб посилання на екземпляр класу всередині себе, як і багато інших мов, орієнтованих на об'єкти.
З документів PHP :
Псевдо-змінна $ це доступна, коли метод викликається з контексту об'єкта. $ це посилання на викликає об'єкт (як правило, на об'єкт, до якого належить метод, але можливо інший об'єкт, якщо метод викликається статично з контексту вторинного об'єкта).
Давайте подивимося, що станеться, якщо ми не будемо використовувати $ this і спробуємо мати змінні екземпляри та аргументи конструктора з тим самим іменем із наступним фрагментом коду
<?php
class Student {
public $name;
function __construct( $name ) {
$name = $name;
}
};
$tom = new Student('Tom');
echo $tom->name;
?>
Це відлуння нічого, окрім
<?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;
?>
це перегукується з "Томом"
$this
у другому конструкторі.
$name
знаходиться Том, але поза функцією воно не має жодного значення, оскільки його обсяг обмежений обсягом функції.
коли ви створюєте клас, у вас є (у багатьох випадках) змінні та методи екземплярів (ака. функції). $ this отримує доступ до цих змінних примірників, щоб ваші функції могли приймати ці змінні і робити все, що потрібно, щоб робити з ними все, що завгодно.
інша версія прикладу Медера:
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
є посиланням на викликає об'єкт (як правило, на об'єкт, до якого належить метод, але можливо інший об'єкт, якщо метод викликається статично з контексту вторинного об'єкта).
$ це спеціальна змінна, і вона посилається на той самий об'єкт, тобто. себе.
він фактично посилається на екземпляр поточного класу
ось приклад, який очистить вищезгадане твердження
<?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/>";
}
}
?>
Це довге детальне пояснення. Сподіваюся, це допоможе новачкам. Я зроблю це дуже просто.
Спочатку давайте створимо клас
<?php
class Class1
{
}
Ви можете опустити тег закриття php, ?>
якщо ви використовуєте лише код php.
Тепер додамо всередину властивості та метод Class1
.
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
return "I am Method 1";
}
}
Властивість - це просто проста змінна, але ми даємо їй властивість імені, оскільки це всередині класу.
Метод - це просто проста функція, але ми говоримо, що метод має його також всередині класу.
public
Ключове слово означає , що метод або властивість можна отримати в будь-якому місці скрипта.
Тепер, як ми можемо використовувати властивості та метод всередині Class1
?
Відповідь - це створення екземпляра або об'єкта, уявлення про об'єкт як про копію класу.
<?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);
Ми створили об'єкт, який є $object1
копією Class1
з усім його вмістом. І ми скинули весь вміст$object1
використання var_dump()
.
Це вам дасть
object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }
Отже весь вміст Class1
у$object1
, за винятком того Method1
, я не знаю, чому методи не відображаються під час скидання об'єктів.
А що робити, якщо ми хочемо $property1
лише отримати доступ . Його просто, ми робимоvar_dump($object1->property1);
, ми лише додали ->property1
, ми вказали на це.
ми також можемо отримати доступ Method1()
, ми робимо var_dump($object1->Method1());
.
Тепер припустимо, що я хочу отримати доступ $property1
зсередини Method1()
, я зроблю це
<?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());
ми створили, $object2 = new Class1;
що є новою копією екземпляра, Class1
або ми можемо сказати. Тоді ми вказали на property1
с$object2
return $object2->property1;
Це надрукується string(15) "I am property 1"
у браузері.
Тепер замість цього робити всередині Method1()
$object2 = new Class1;
return $object2->property1;
Ми робимо це
return $this->property1;
The $this
Об'єкт використовується всередині класу для позначення самого класу.
Це альтернатива для створення нового об’єкта, а потім його повернення таким чином
$object2 = new Class1;
return $object2->property1;
Ще один приклад
<?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());
Ми створили 2 властивості, що містять цілі числа, а потім додали їх і поставили результат $this->result
.
Не забувайте цього
$this->property1
= $property1
=119
вони мають таке саме значення .. тощо
Я сподіваюся, що це пояснює ідею.
Ця серія відео дуже допоможе вам в OOP
https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv
Як зазначає meder, це стосується екземпляра поточного класу .
Див. Документи PHP . Це пояснюється під першим прикладом.