在变量中使用花括号在PHP中的良好实践

时间:2011-09-14 16:33:09

标签: php coding-style

一些开发人员在他们的PHP代码中使用花括号,有些只是将它们连接起来。

例如,这两行代码在PHP中完全有效

echo "<h1>{$row['title']}</h1>";

echo "<h1>" . $row['title'] . "</h1>";

代码的输出在末尾是相同的,但哪一个被认为是一个很好的编码实践?

谢谢你,J

7 个答案:

答案 0 :(得分:12)

使用大括号语法稍慢。考虑以下测试:

<?php

  $array = array('key'=>'val');

  $start1 = microtime(TRUE);
  for ($i = 0; $i < 100000; $i++) {
    $str = "<tag>{$array['key']}</tag>";
  }
  $end1 = microtime(TRUE);
  $result1 = $end1 - $start1;

  $start2 = microtime(TRUE);
  for ($j = 0; $j < 100000; $j++) {
    $str = "<tag>".$array['key']."</tag>";
  }
  $end2 = microtime(TRUE);
  $result2 = $end2 - $start2;

  $start3 = microtime(TRUE);
  for ($k = 0; $k < 100000; $k++) {
    $str = '<tag>'.$array['key'].'</tag>';
  }
  $end3 = microtime(TRUE);
  $result3 = $end3 - $start3;

  echo "1: $result1\n2: $result2\n3: $result3\n";

?>

在我的PHP / 5.2.19-win32系统上,第一个测试(带花括号)稍慢(~7%)。然而,差异是如此之小,以至于不值得担心,我会说做你最满意的事情。

略有反直觉的是,第二次测试的速度始终高于第三次测试(~2%) - 双引号比单引号快 - 而且我原本预计它会反过来。

答案 1 :(得分:6)

要求最佳练习是没用的,因为你还没有写出你喜欢哪种风格。如果它可以帮助你用大括号读取你的字符串,使用它们,它们工作。有多种方法可以解决这个问题,仅举几例:

echo "<h1>{$row['title']}</h1>";

echo "<h1>" . $row['title'] . "</h1>";

echo "<h1>", $row['title'], "</h1>";

printf("<h1>%s</h1>", $row['title']);

echo sprintf("<h1>%s</h1>", $row['title']);

?><h1><?php echo $row['title']; ?></h1><?php # thx, Jaime :)

...

选择适合您的内容。在做的过程中学到的最佳实践。该语言是一种满足您需求的工具。

答案 2 :(得分:4)

我总是发现回声'<h1>' . $row['title'] . '</h1>';更容易阅读。

答案 3 :(得分:4)

实际上,在PHP中使用字符串的单引号更有效。

所以,我会说不,在字符串中的变量周围使用花括号不是一个好习惯。

使用以下语法更有效,更易读(imho):

echo '<h1>' . $row['title'] . '</h1>';

答案 4 :(得分:3)

我从未在变量中使用大括号。只是看起来很长时间啰嗦!

答案 5 :(得分:1)

我没有看到任何错误,除非您没有正确地转义用户提交的HTML,在任何一种情况下您都可以忘记这样做。

有些人可能会说单引号效率更高,但我看到的所有测试都是几年前在旧硬件上做出的,这并不代表它们的可信度。对当前硬件的测试显示,100000运行的单引号仅比花括号can't be an argument 7毫秒

使用您认为更具可读性的内容,因为开发人员现在的时间比计算机时间贵得多。让服务器完成他们的工作。

答案 6 :(得分:1)

如果您还没有达成一致的标准,我建议您使用现有标准,例如ZendPear。例如,关于您的问题,Zend guide具体说明:

允许使用以下任一形式进行变量替换:

$greeting = "Hello $name, welcome back!";

$greeting = "Hello {$name}, welcome back!";