我想知道,插入PHP变量到字符串的正确方法是什么? 这种方式:

echo "Welcome ".$name."!"

或者这样:

echo "Welcome $name!"

这两种方法都可以在我的PHP v5.3.5中使用。后者更短更简单,但我不确定前者是更好的格式还是更合适。


当前回答

从php4开始,你可以使用字符串格式化器:

$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);

来源:sprintf ()

其他回答

我使用点(.)连接字符串和变量。像这样,

echo "Hello ".$var;

有时,我使用花括号连接字符串和变量,看起来像这样-

echo "Hello {$var}";

我知道这是一个老问题,但我认为有人必须提到所有的优点和缺点:

这是个人偏好。

性能:没有区别。正如许多人提到的,如果使用不切实际的许多变量,双引号可能会更快。

更好的用法:单引号(大多数情况下)。正如@Khez所说,用单引号你可以连接任何东西,甚至是函数调用和变量修改,就像这样:echo 'hi '。(名字)美元。($i + 1);双引号能做而单引号不能做的唯一一件事是使用\n、\r、\t等。

可读性:没有区别(可能有个人偏好)。

可写性/可重写性/调试:在单行语句中没有区别,但在处理多行语句时,在调试或编写时注释/取消注释更容易。例如:

$q = 'SELECT ' .
     't1.col1 ' .
     ',t2.col2 ' .
   //',t3.col3 ' .
     'FROM tbl1 AS t1 ' .
     'LEFT JOIN tbl2 AS t2 ON t2.col2 = t1.col1 ' .
   //'LEFT JOIN tbl3 AS t3 ON t3.col3 = t2.col2 ' .
     'WHERE t1.col1 = ' . $x . ' ' .
     '  AND t2.col2 = ' . $y . ' ' .
   //'  AND t3.col3 = ' . $z . ' ' .
     'ORDER BY t1.col1 ASC ' .
     'LIMIT 10';

减少逃避:单引号。对于单引号,只需要转义2个字符('和\)。对于双引号,您需要转义2个字符(",\),如果需要,还需要转义3个字符($,{和})。

变化少:单引号。例如,如果你有以下代码:

echo 'Number ' . $i . '!';

你需要增加1到$i,所以它变成了like:

echo 'Number ' . ($i + 1) . '!';

但是对于双引号,你需要改变这个:

echo "Number $i!";

:

echo "Number " . ($i + 1) . "!";

结论:用你喜欢的。

在这两种语法之间,你应该选择一个你喜欢的:-)

就我个人而言,在这种情况下,我会选择你的第二个解决方案(变量插值),我发现它更容易写和读。

结果是一样的;即使对性能有影响,那也不重要。

作为旁注,所以我的回答更完整一点:那天你会想做这样的事情:

echo "Welcome $names!";

PHP会将您的代码解释为您试图使用$names变量——这个变量并不存在。 -注意,只有在字符串中使用" not "时它才会起作用。

那天,你需要使用{}:

echo "Welcome {$name}s!"

不需要退回到连接。

还要注意你的第一个语法:

echo "Welcome ".$name."!";

可以优化,避免连接,使用:

echo "Welcome ", $name, "!";

(但是,就像我之前说的,这并不重要…)

1 -除非你在做成千上万次的拼接和插值——这可能不是完全的情况。

echo "Welcome $name!";

这是最好的办法。

你不需要其他任何东西

从简单、易读、一致和易于理解的角度来看(因为性能在这里并不重要):

Using embedded vars in double quotes can lead to complex and confusing situations when you want to embed object properties, multidimentional arrays etc. That is, generally when reading embedded vars, you cannot be instantly 100% sure of the final behavior of what you are reading. You frequently need add crutches such as {} and \, which IMO adds confusion and makes concatenation readability nearly equivalent, if not better. As soon as you need to wrap a function call around the var, for example htmlspecialchars($var), you have to switch to concatenation. AFAIK, you cannot embed constants.

在某些特定情况下,“嵌入vars的双引号”可能是有用的,但一般来说,我会使用串联(方便时使用单引号或双引号)