PHP中的花括号表示法
Posted
技术标签:
【中文标题】PHP中的花括号表示法【英文标题】:Curly Braces Notation in PHP 【发布时间】:2012-02-21 18:48:35 【问题描述】:我正在阅读 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';
如果您有某种 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']
的值运行多个函数之一。
【讨论】:
谢谢,我发现这个解释非常通俗易懂。 在您的第一个示例中,简单地编写$object->$property_name = 'bar'
将具有完全相同的效果。我想当它是一个非平凡的表达式时,大括号是必需的【参考方案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"
【讨论】:
为什么没人说话?原样的代码根本不起作用(缺少函数调用)。现在通过使用 vars 而不是函数来修复。【参考方案3】:花括号用于显式指定变量的结尾 名字。
https://***.com/a/1147942/680578
http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex
【讨论】:
裸链接答案不是答案。如果您觉得这个问题与另一个问题重复,请将其标记为关闭。否则,您应该详细说明您引用的链接。 我知道字符串中的大括号,但在我的示例中大括号没有用引号括起来。以上是关于PHP中的花括号表示法的主要内容,如果未能解决你的问题,请参考以下文章