Подтвердить что ты не робот

В чем разница между `$ this-> name` и` $this → $name`?

Мне интересно, в чем разница между $this->name и $this->$name? Также нужно, чтобы $this был строго назван этим или может быть что-нибудь?

4b9b3361

Ответ 1

$this является зарезервированным именем переменной и не может использоваться ни для чего другого. Это указывает на объект, в котором вы сейчас работаете. Вы должны использовать $this, потому что вы не знаете, какой объект переменной будет назначен.

$this->name относится к текущей переменной класса name

$this->$name относится к переменной класса независимо от значения $name. Таким образом,

$name = "name";
echo $this->$name; // echos the value of $this->name.

$name = "test";
echo $this->$name;  // echos the value of $this->test

Ответ 2

$это зарезервированное имя, используемое в PHP, чтобы указать на текущий экземпляр класса, в котором вы его используете (quoting):

Доступна псевдопеременная $thisкогда метод вызывается изнутри контекст объекта.
$this является ссылкой к вызывающему объекту (обычно объект, к которому принадлежит метод, но, возможно, другой объект, если метод называется статически из контекст вторичного объекта).


При использовании $this->name вы получаете доступ к свойству с именем name текущего объекта.


При использовании $this->$name перед доступом к свойству определяется $name, что означает, что вы получите доступ к свойству, имя которого содержится в локальной переменной $name.

Например, с этой частью кода:

$name = 'abc';
echo $this->$name;

Фактически вы будете эхом отослать содержимое свойства abc, как если бы вы написали:

echo $this->abc;

При этом вы используете переменные переменные (цитирование):

Свойства класса также могут быть доступны используя имена свойств переменных.
имя переменной переменной будет разрешены в рамках сферы применения вызов выполнен.
Например, если вы имеют такое выражение, как $foo->$bar, то местная область будет рассмотрена для $bar, и его значение будет использоваться как имя свойства $foo. Знакомства также верно, если $bar является массивом доступ.

Ответ 3

Этот вопрос просто появился после обновления. Мне понравился вопрос, поэтому я подумал, что добавлю свой собственный пример разницы.

class Test
{
    public $bar = 'bar';
    public $foo = 'foo';

    public function __construct()
    {
        $bar = 'foo';

        $this->bar; // bar
        $this->$bar; // foo
    }
}