我想知道在引号内写变量名是否 100% 正确。
我的意思是,有什么理由这样做
echo "Hello my name is " . $name;
代替
echo "Hello my name is $name";
谢谢。
两者都很好,而且它是用户偏好,您会发现它更具可读性 - 我个人更喜欢连接变量的第一种方法。
但是,请记住:
echo "Hello my name is $name";
不一样
echo 'Hello my name is $name';
第二个将按字面意思输出:
Hello my name is $name
要记住的事情。
实际上,正如我已经评论过的,以这种方式编写是 100% 正确的 PHP 语法。PHP 不会给你一个语法错误。但是你会知道通过执行你的代码,如果不确定,在手册中查找语言。
所以简短的回答是:是的,100% 正确。
然后你问“有什么理由去做” - 我强烈建议你定义原因,因为客观地说,没有理由。接受的答案中给出的“指标”具有误导性,因为问题(实际上在技术上永远不能严格)没有被足够隔离(甚至可能),这导致比较错误的数字。
如果要计算两者之间的差异,则实际上没有可以衡量的差异-零,nada,什么都没有。
此外,它甚至会有所不同,有时甚至一个更快,有时另一个(如果您运行它,代码/演示见下文):
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);
}
唯一的区别是性能,将变量名插入引号使用更多的处理器。
示范:
<?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>';
?>
在 Intel core I3-2120 3.3Ghz 上运行此脚本会返回:
* duration:0.25428795814514 毫秒
持续时间:2.8928861618042 毫秒 *
区别不大,只是为了展示概念。
这纯粹是一种偏好,两者都是 100% 正确的。尽管为了可读性,我更喜欢第一种连接方法。