$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());