变量名称INSIDE引号

时间:2012-05-10 09:07:55

标签: php string variables

我想知道在引号内写变量名是否100%正确。

我的意思是,有什么理由可以吗

echo "Hello my name is " . $name;

而不是

echo "Hello my name is $name";

感谢。

4 个答案:

答案 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版本而不是想知道哪一个更快,那么您的“代码”会得到更多改进。

经验法则:除非你没有陷入瓶颈,否则不要,永远不要“优化”。你会使你的代码变得更糟糕。

你给出了写这种或那种方式的原因,因为你需要阅读你的代码。

enter image description here

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毫秒*

区别并不大,只是为了表明这个概念。