-1

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

我的意思是,有什么理由这样做

echo "Hello my name is " . $name;

代替

echo "Hello my name is $name";

谢谢。

4

4 回答 4

3

两者都很好,而且它是用户偏好,您会发现它更具可读性 - 我个人更喜欢连接变量的第一种方法。

但是,请记住:

echo "Hello my name is $name";

不一样

echo 'Hello my name is $name';

第二个将按字面意思输出:

Hello my name is $name

要记住的事情。

于 2012-05-10T09:15:45.983 回答
2

实际上,正如我已经评论过的,以这种方式编写是 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);
}
于 2012-05-11T07:26:57.523 回答
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>';
?>

在 Intel core I3-2120 3.3Ghz 上运行此脚本会返回:
* duration:0.25428795814514 毫秒
持续时间:2.8928861618042 毫秒 *

区别不大,只是为了展示概念。

于 2012-05-10T09:38:21.427 回答
0

这纯粹是一种偏好,两者都是 100% 正确的。尽管为了可读性,我更喜欢第一种连接方法。

于 2012-05-10T09:09:19.940 回答