【问题标题】:Why is {'property'} used in PHP [duplicate]为什么在 PHP 中使用 {'property'} [重复]
【发布时间】:2016-11-17 22:31:44
【问题描述】:

请随意重新命名这个问题,因为我不知道这样做的正确名称。更重要的是,我看到人们在访问对象内部的属性时使用{'property'},所以我设置了一个示例来尝试理解,但是当我使用该属性时可以访问该属性,而当我不使用该属性时?

class Example {
    public $name;
}

$e = new Example();
$e->{'name'} = 'Kdot';

echo $e->name; // output: Kdot

我已尝试更改范围并通过类方法访问它,但它再次以两种方式工作。

谁能帮我理解使用 {} 分隔符的含义是什么?因为据我所知,如果您将参数存储在另一个变量中,这也可以:

$property = 'name';
echo $e->$property; // output: Kdot

【问题讨论】:

  • 许多方法可以做同样的事情。就像在 JS 中一样,你可以做window['onload']window.onloadvar name = onload; window[name]
  • 这只是最佳实践吗? @JuanMendes
  • 使用{'property'} 表示法不是最佳实践,但如果它们有很多不是有效标识符的属性(例如{'%%property%%'} 不会是一个有效的标识符,但如果以这种方式访问​​,则可以用作属性)。

标签: php oop


【解决方案1】:

它们大多只是做同一件事的不同方式,但功能略有不同。

一个区别是,如果您想连接内联并将其用作属性名称,则需要大括号:

// example:
$property = 'foo';

echo $e->{$property . 'Suffix'}; // good, uses $e->fooSuffix
echo $e->$property . 'Suffix'    // bad, uses $e->foo and adds "Suffix" literal

除此之外,直接访问属性名称需要符合一定的规则。例如if you have a dash in your property name,您需要使用大括号来访问它。

【讨论】:

  • 很好,我一直在努力想一个你需要的例子obj->${}
  • 谢谢,这可能是因为我一直在使用前缀和分隔符进行搜索,所以我没有找到此信息。我很感激这一点,并且可能会从现在开始使用大括号。
  • 实际上,我想它可能更适用于动态方法名称而不是属性......不过只是一个例子:)
  • @KDOT 我实际上建议您只在需要时使用大括号,否则只会给代码添加不必要的混乱。
  • 你在那个例子中使用大括号杀死了我的氛围;)感谢您的解释和资源! @RobbieAverill
猜你喜欢
  • 1970-01-01
  • 2016-06-26
  • 2015-03-21
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 2019-06-13
  • 2020-04-29
相关资源
最近更新 更多