Ответы:
Это ссылка на текущий объект, чаще всего используется в объектно-ориентированном коде.
Пример:
<?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
Я знаю его старый вопрос, во всяком случае, другое точное объяснение по поводу $ 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 :
Псевдопеременная $ this доступна, когда метод вызывается из контекста объекта. $ this - это ссылка на вызывающий объект (обычно это объект, которому принадлежит метод, но, возможно, другой объект, если метод вызывается статически из контекста вторичного объекта).
Давайте посмотрим, что произойдет, если мы не будем использовать $ 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
using 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;
$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
у них такая же ценность и т. д.
Надеюсь, это объясняет идею.
Эта серия видео очень поможет вам в ООП
https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv
Как сказал Медер, это относится к экземпляру текущего класса .
См. Документацию PHP . Это объясняется в первом примере.