@GPK1929

Для чего и главное где используются {} в php?

Подскажите пожалуйста для чего в php используются {} (не в контексте класса) я имею ввиду что в переменных переменных {} используется как разделитель, а вот читаю книжку так там есть такой возврат return "{$this->product}" или вот когда приходится xml конвертируешь через new SimpleXMLElement так к атрибутам если они через тире надо обращаешься $release->{"country-code"} или $release->{"@country"}. не могу ничего по этому поводу найти, все что наше так это php.net/manual/ru/language.variables.variable.php подскажите что к чему кинте ссылку или где про это можно почитать либо опишите сами что за чудо {}.
  • Вопрос задан
  • 1063 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
$release->{"country-code"} или $release->{"@country"}

country-code и @country - это свойства объекта, но написать $release->country-code или $release->@country нельзя, это не переварится интерпретатором. Поэтому и используется такой способ.
Подробнее можно прочитать, разумеется, в документации.

return "{$this->product}"
А вот это - дурацкий хак. Насколько я понимаю, это сделано для того, чтобы возвращать строковое представление объекта product. Но гораздо нагляднее делать $this->product->__toString().
Вот пример такой системы:
class Product {
	public function __toString() {
		return 'foo';
	}
}

class Thing {
	private $product;
	
	public function __construct() {
		$this->product = new Product;
	}
	
	public function bar() {
		// Писать меньше и можно гордиться своим крутым маневром
		// Но через месяц надо вспоминать, зачем это кавычки вокруг свойства
		return "$this->product";

		// Наглядно и понятно, никакой магии
		return $this->product->__toString();
	}
}

$thing = new Thing();
var_dump($thing->bar());
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mannaro
@mannaro
Умею профессионально гуглить
Ну смотрите. Есть много вариантов, когда получить доступ к свойству нельзя (это, чаще всего, спецсимволы в названии). Тогда мы используем эту конструкцию. Также, бывает, надо вычислить название метода динамически. Также, бывает, надо вставить свойство инстанса в строке текста.
return "{$this->product}"; // $this->product = "\"Hello world\"";

$name = "foo";
$name = "bar";
return $this->{$name}; // $this->bar;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы