PHP中的大括号表示法

我正在阅读OpenCart的源代码,我在下面看到了这样的表达式。 有人可以向我解释:

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

在声明中,有一个奇怪的代码部分
$this->{'model_shipping_' . $result['code']}
它有{} ,我想知道那是什么? 它看起来是一个对象,但我不确定。


花括号用于表示PHP中的字符串或变量插值。 它允许你创建'变量函数',它可以让你调用一个函数而不需要明确地知道它实际是什么。

使用这个,你可以像创建一个数组一样在对象上创建一个属性:

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

或者,如果您有某种REST API类,则可以调用其中一种方法:

$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']的值运行多个函数之一。


该属性的名称是在运行时从两个字符串计算得出的

说, $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"

大括号用于明确指定变量名称的结尾。

https://stackoverflow.com/a/1147942/680578

http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

链接地址: http://www.djcxy.com/p/10195.html

上一篇: Curly Braces Notation in PHP

下一篇: Understanding Magento Block and Block Type