我想知道在引号内写变量名是否100%正确。
我的意思是,有什么理由可以吗
echo "Hello my name is " . $name;
而不是
echo "Hello my name is $name";
感谢。
答案 0 :(得分:3)
两者都很好,用户偏好你发现更具可读性 - 我个人更喜欢第一种连接变量的方法。
但是,请记住:
echo "Hello my name is $name";
与
不同echo 'Hello my name is $name';
第二个将按字面输出:
Hello my name is $name
要记住的事情。
答案 1 :(得分:2)
实际上,正如我已经评论过的那样,用这种方式编写100%正确的PHP语法。 PHP不会给你一个语法错误。但是你可以通过执行代码来了解它,如果不确定,可以在手册中查找语言。
所以简短的回答是:是的,100%正确。
然后你问“有什么理由可以做” - 我想强烈建议你定义原因,因为客观上没有一个。在接受的答案中给出的“指标”具有误导性,因为问题(实际上在技术上永远不能严格地说)没有被隔离得足够(甚至可能是)导致比较错误的数字。
如果计算两者之间的差异,那么字面上没有可以衡量的差异 - 零,虚无,没有。
此外,它甚至会有所不同,有时即使是一个更快,有时另一个(如果你运行它,代码/演示见下文):
10 runs à 100 000 iterations:
single | double | diff | real
---------+----------+-----------+----------
0.014578 | 0.016206 | -0.001628 | -0.000000
0.015382 | 0.016352 | -0.000970 | -0.000000
0.015050 | 0.016156 | -0.001106 | -0.000000
0.015630 | 0.016280 | -0.000650 | -0.000000
0.015259 | 0.016220 | -0.000961 | -0.000000
0.015189 | 0.016190 | -0.001001 | -0.000000
0.014612 | 0.016264 | -0.001652 | -0.000000
0.015672 | 0.016257 | -0.000585 | -0.000000
0.015171 | 0.016251 | -0.001080 | -0.000000
0.014855 | 0.016166 | -0.001311 | -0.000000
如果您经常升级PHP版本而不是想知道哪一个更快,那么您的“代码”会得到更多改进。
经验法则:除非你没有陷入瓶颈,否则不要,永远不要“优化”。你会使你的代码变得更糟糕。
你给出了写这种或那种方式的原因,因为你需要阅读你的代码。
http://codepad.viper-7.com/z5p2xf
<?php
/**
* @link http://stackoverflow.com/questions/10530798/variable-name-inside-quotation-marks
*/
header('Content-Type: text/plain');
$iterations = 100000;
$runs = 10;
printf("%d runs à %s iterations:\n\n", $runs, number_format($iterations, 0, '', ' '));
$plateaux = 0;
for ($r = 0; $r < $runs; $r++) {
$time = microtime(true);
for ($i = 1; $i < $iterations; $i++) {
;
}
$plateaux += microtime(true) - $time;
}
$plateaux = $plateaux / $runs;
$results = array();
for ($r = 0; $r < $runs; $r++) {
$result = &$results[];
$time = microtime(true);
for ($i = 1; $i < $iterations; $i++) {
"name$i";
}
$result[1] = microtime(true) - $time;
$time = microtime(true);
for ($i = 1; $i < $iterations; $i++) {
"name" . $i;
}
$result[0] = microtime(true) - $time; #
unset($result);
}
echo " single | double | diff | real \n";
echo "---------+----------+-----------+----------\n";
foreach ($results as $result) {
$delta1 = $result[0] - $plateaux;
$delta2 = $result[1] - $plateaux;
$diff = $delta1 - $delta2;
printf("%f | %f | %f | %f\n", $delta1, $delta2, $diff, $diff / $iterations);
}
答案 2 :(得分:0)
纯粹是一种偏好,两者都是100%正确的。为了便于阅读,我更喜欢第一种连接方法。
答案 3 :(得分:0)
唯一的区别是性能,在引用中插入变量名称使用更多处理器 示范:
<?php
$name='name';
$time = microtime(true);
for ($i=1; $i<100000; $i++){
$name = "name".$i;
echo "Hello my name is " . $name;
}
echo '<br>*** duration:'.(microtime(true)-$time).' milliseconds ***<br>';
$time = microtime(true);
for ($i=1; $i<100000; $i++){
$name = "name$i";
echo "Hello my name is $name";
}
echo '<br>*** duration:'.(microtime(true)-$time).' milliseconds ***<br>';
?>
在英特尔核心I3-2120 3.3Ghz上运行此脚本会返回:
*持续时间:0.25428795814514毫秒
持续时间:2.8928861618042毫秒*
区别并不大,只是为了表明这个概念。