Что означает переменная $this в PHP?
Я вижу, что переменная $this
в PHP все время, и я понятия не имею, для чего он используется. Я никогда лично не использовал его, и поисковые системы игнорируют $
и я в конечном итоге с поиском слова "это".
может кто-нибудь сказать мне, как переменная $this работает в PHP?
9 ответов:
это ссылка на текущий объект, он наиболее часто используется в объектно-ориентированном коде.
- Ссылка:http://www.php.net/manual/en/language.oop5.basic.php
- праймер:http://www.phpro.org/tutorials/Object-Oriented-Programming-with-PHP.html
пример:
<?php class Person { public $name; function __construct( $name ) { $this->name = $name; } }; $jack = new Person('Jack'); echo $jack->name;
это сохраняет строку 'Jack' как свойство созданного объекта.
лучший способ узнать об
$this
переменная в php-это спросить PHP, что это такое. Не спрашивайте нас, спросите компилятор:print gettype($this); //object print get_object_vars($this); //Array print is_array($this); //false print is_object($this); //true print_r($this); //dump of the objects inside it print count($this); //true print get_class($this); //YourProject\YourFile\YourClass print isset($this); //true print get_parent_class($this); //YourBundle\YourStuff\YourParentClass print gettype($this->container); //object
Я знаю его старый вопрос, во всяком случае другое точное объяснение о $this. $this в основном используется для ссылки на свойства класса.
пример:
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 docs:
псевдо-переменная $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 обращается к этим переменным экземпляра, чтобы ваши функции могли принимать эти переменные и делать то, что им нужно, чтобы делать с ними все, что вы хотите.
другая версия примера Медера:
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
$Это специальная переменная и она относится к тому же объекту ie. себя.
он фактически ссылается на экземпляр текущего класса
вот пример, который очистит приведенное выше утверждение
<?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/>"; } } ?>
$this
и ссылка на вызывающий объект (обычно объект, к которому принадлежит метод, но возможно и другой объект, если метод вызывается статически из контекста вторичного объекта).
Это относится к экземпляру текущего класса, как Медер сказал.
посмотреть PHP Docs. Это объясняется в первом примере.