【问题标题】:When to wrap curly braces around a variable何时将花括号包裹在变量周围
【发布时间】:2016-06-06 12:12:42
【问题描述】:

我不知道如何解释这一点,但简单来说,我看到人们在输出值时使用{$variable}。我注意到{$variable} 并不能解决所有问题。我们什么时候应该使用{$variable}

【问题讨论】:

  • 这不是普通 php,可能是 php 框架语法,例如 Laravel 5 的刀片模板引擎使用 {{$variable}} 打印内容。
  • @asur 不正确。这被称为complex (curly) syntax
  • @Ciccio 确实,但我认为他的意思是花括号本身而不是打印在里面
  • "$var['key']" 呢?似乎没有花括号也可以工作,但建议是什么?

标签: php


【解决方案1】:

晚了几年,但我可以补充一下:

您甚至可以在花括号中使用变量来动态访问类中对象的方法。

例子:

$username_method = 'username';
$realname_method = 'realname';

$username = $user->{$username_method}; // $user->username;
$name = $user->{$realname_method}; // $user->realname

不是一个很好的例子,只是为了演示功能。

根据@kapreski 在 cmets 中的请求的另一个示例。

/**Lets say you need to get some details about the user and store in an 
array for whatever reason.  
Make an array of what properties you need to insert. 
The following would make sense if the properties was massive. Assume it is
**/

$user = $this->getUser(); //Fetching User object

$userProp = array('uid','username','realname','address','email','age');

$userDetails = array();

foreach($userProp as $key => $property) {
    $userDetails[] =  $user->{$property};       
}

print_r($userDetails);

循环完成后,您将看到从 $userDetails 数组中的用户对象获取的记录。

在 php 5.6 上测试

【讨论】:

  • IMO 这实际上是用花括号包围变量的主要用例。那是为了使用变量的内容来引用对象属性。
  • 您能否添加更详细的示例或链接到带有一些真实示例的文章,谢谢..
  • @karpreski。我添加了一个新示例。希望它变得更加清晰:)
  • 看起来$username = $user->$username_method; 无论我是否使用花括号都会产生相同的输出。我错过了什么吗?
【解决方案2】:

据我所知,你可以使用变量$x

echo "this is my variable value : $x dollars";

...但是如果变量和它周围的文本之间没有任何空格,则应该使用{}。例如:

echo "this is my variable:{$x}dollars";

因为如果你写了 $xdollars 它会将它解释为另一个变量。

【讨论】:

  • echo "this is my variable:{$x}dollars";echo "this is my variable:" . $x . "dollars";除了语法有区别吗?
【解决方案3】:

什么是 PHP 花括号:

您知道可以通过四种不同的方式指定字符串。其中两种方式是——双引号(“”)和heredoc语法。您可以在这两种类型的字符串中定义一个变量,PHP 解释器也会在字符串中解析或解释该变量。

现在,有两种方法可以在字符串中定义变量——简单语法是在字符串中定义变量最常用的方法,复杂语法是使用花括号定义变量。

花括号语法:

使用带有花括号的变量非常容易。只需用 { 和 } 包装变量,如下所示:

{$variable_name}

注意:{ 和 $ 之间不能有任何间隔。否则,PHP 解释器不会将 $ 后面的字符串视为变量。

花括号示例:

<?php
$lang = "PHP";
echo "You are learning to use curly braces in {$lang}.";
?>

输出:

You are learning to use curly braces in PHP.

何时使用花括号:

当您在字符串中定义变量时,如果使用简单的语法定义变量,PHP 可能会将变量与其他字符混淆,这将产生错误。请参见下面的示例:

<?php
$var = "way";
echo "Two $vars to defining variable in a string.";
?>

输出:

Notice: Undefined variable: vars …

在上面的例子中,PHP 的解释器认为 $vars 是一个变量,但是这个变量是 $var。要分隔变量名和字符串中的其他字符,可以使用花括号。现在,请参阅上面使用花括号的示例-

<?php
$var = "way";
echo "Two {$var}s to define a variable in a string.";
?>

输出:

Two ways to define a variable in a string.

来源:http://schoolsofweb.com/php-curly-braces-how-and-when-to-use-it/

【讨论】:

  • 它对于类属性和方法也很有用。 "this is a {$class-&gt;prop}" and it is {class-&gt;method()}"; stackoverflow.com/questions/10002652/…
  • 这很有帮助。我也非常同意@dlaub3 的观点,即 $class->prop(即使没有花括号!)几乎总是比 {$var} 更有效,至少在我的经验中是这样。
猜你喜欢
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 2015-05-09
相关资源
最近更新 更多