在字符串中连接或直接插入变量

我想知道,插入PHP变量到字符串的正确方法是什么? < br / > < br / > : < /强> < br / >

echo "Welcome ".$name."!"

或者这样: < br / >

echo "Welcome $name!"

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

546606 次浏览

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

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

结果是一样的;即使存在性能影响,这些也不重要__abc0。

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

echo "Welcome $names!";
PHP会解释你的代码,就好像你试图使用$names变量一样——这个变量并不存在。 -注意,只有在字符串中使用" not "时,它才会起作用

那一天,你将需要使用{}:

echo "Welcome {$name}s!"

不需要退回到连接。

< p > < br > 还要注意第一个语法:

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

可能是优化,避免连接,使用:

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

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

< p > < br > 1 -除非你正在做成千上万的连接vs插值-这可能不是完全的情况

你应该选择第一个。他们没有什么不同,除了性能,第一个将是最快的第二个比较。

如果双引号内的变量PHP需要时间来解析变量。

看看这个单引号或双引号变量连接?

这是另一个例子在php中单引号和双引号在性能上有优势吗?

我不明白为什么上面链接的这个答案会被点赞,为什么这个答案会被点赞。

我也说过了。

你也可以看这里

PHP中哪个更快,单引号还是双引号?< / >

两种都可以。使用对你来说能见度更好的那个。说到可见性,你也可以检查printf

从第一个开始,使用单引号!

  1. 它更容易阅读,这意味着其他程序员将知道发生了什么
  2. 它的工作速度略快,PHP解剖源代码时创建操作码的方式,基本上都会这样做,所以给它一个帮助!
  3. 如果你也使用单引号而不是双引号,你会进一步提高你的表现。
只有当你需要\r\n\t! 在任何其他情况下使用它的开销都是不值得的

你也应该检查PHP变量连接phpbench.com关于不同方法的一些基准测试。

这只是品味问题 你想用什么就用什么。< / p >

大多数时候我用第二个,但这要看情况。

我还建议你找一个好的编辑器,它可以突出显示字符串中的变量

双引号字符串更优雅,因为您不必在每次需要插入变量时拆分字符串(就像您必须对单引号字符串做的那样)。

但是,如果需要插入函数的返回值,则不能将其插入双引号字符串中——即使使用大括号将其括起来!

//syntax error!!
//$s = "Hello {trim($world)}!"


//the only option
$s = "Hello " . trim($world) . "!";

不要连接。这是不需要的,我们的逗号作为echo可以接受多个参数

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

关于使用单引号或双引号,差异可以忽略不计,您可以使用大量字符串进行测试。

从make thinks 简单的可读的一致的容易理解的角度来看(因为性能在这里不重要):

    当你想嵌入对象属性、多维数组等时,在双引号中使用嵌入式变量可能会导致复杂和令人困惑的情况。 也就是说,通常在读取嵌入式变量时,您不能立即100%确定所读取内容的最终行为
  • 你经常需要添加像{}\这样的拐杖,在我看来,这增加了混乱,使串联的可读性几乎相当,如果不是更好的话。

  • 一旦你需要将一个函数调用包装在var周围,例如htmlspecialchars($var),你必须切换到串联。

  • AFAIK,你不能嵌入常量。

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

我知道这个问题已经有了一个选择的答案,但我发现这篇文章明显表明字符串插值比拼接工作得更快。这可能对那些仍在犹豫的人有所帮助。

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

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

来源:sprintf ()

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

更好的语法:这是个人喜好。

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

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

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

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

$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) . "!";

结论: 使用你喜欢的

如果你想执行SQL命令,而你的变量是数组成员,那么你不应该在数组的[]中使用单引号(像这样:['']);例如,如果你使用这个字符串作为SQL命令,你会得到server error 500:

$con = mysqli_connect('ServerName', 'dbUsername', 'dbPassword');
mysqli_select_db($con, 'dbName')


//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray['TraceNo']')";
mysqli_query($con, $sql)

正确的字符串是:

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray[TraceNo]')";

我一直都喜欢这种方式,而且发现它容易得多。

echo "Welcome {$name}!"

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

echo "Hello ".$var;

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

echo "Hello {$var}";
echo "Welcome $name!";

这是最好的办法。

你不需要其他任何东西