一些开发人员在他们的PHP代码中使用花括号,有些只是将它们连接起来。
例如,这两行代码在PHP中完全有效
echo "<h1>{$row['title']}</h1>";
echo "<h1>" . $row['title'] . "</h1>";
代码的输出在末尾是相同的,但哪一个被认为是一个很好的编码实践?
谢谢你,J
答案 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)
如果您还没有达成一致的标准,我建议您使用现有标准,例如Zend或Pear。例如,关于您的问题,Zend guide具体说明:
允许使用以下任一形式进行变量替换:
$greeting = "Hello $name, welcome back!";
$greeting = "Hello {$name}, welcome back!";