Вставка фигурных скобок в PHP

Я читал источник OpenCart, и я столкнулся с таким выражением ниже. Может ли кто-нибудь объяснить это мне:

$quote = $this->{'model_shipping_' . $result['code']}->getQuote($shipping_address);

В заявлении есть странная часть кода, которая называется $this->{'model_shipping_' . $result['code']}
который имеет {}, и мне интересно, что это? Это выглядит для меня объектом, но я не уверен.

Ответы

Ответ 1

Кудристые фигурные скобки используются для обозначения интерполяции строк или переменных в PHP. Это позволяет вам создавать "переменные функции", которые могут позволить вам вызывать функцию без явного понимания того, что на самом деле есть.

Используя это, вы можете создать свойство объекта почти так же, как и массив:

$property_name = 'foo';
$object->{$property_name} = 'bar';
// same as $object->foo = 'bar';

Или вы можете вызвать один из множества методов, если у вас есть какой-то класс API REST:

$allowed_methods = ('get', 'post', 'put', 'delete');
$method = strtolower($_SERVER['REQUEST_METHOD']); // eg, 'POST'

if (in_array($method, $allowed_methods)) {
    return $this->{$method}();
    // return $this->post();
}

Он также используется в строках для более легкой идентификации интерполяции, если вы хотите:

$hello = 'Hello';
$result = "{$hello} world";

Конечно, это упрощения. Цель вашего примерного кода - запустить одно из нескольких функций в зависимости от значения $result['code'].

Ответ 2

Имя свойства вычисляется во время выполнения из двух строк

Скажем, $result['code'] - 'abc', доступное свойство будет

$this->model_shipping_abc

Это также полезно, если у вас есть странные символы в именах свойств или методов.

В противном случае невозможно было бы различать следующее:

class A {
  public $f = 'f';
  public $func = 'uiae';
}

$a = new A();
echo $a->f . 'unc'; // "func"
echo $a->{'f' . 'unc'}; // "uiae"