Мне интересно, в чем разница между $this->name
и $this->$name
? Также нужно, чтобы $this
был строго назван этим или может быть что-нибудь?
В чем разница между `$ this-> name` и` $this → $name`?
Ответ 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
}
}