PHP-串联或直接在字符串中插入变量

PHP-串联或直接在字符串中插入变量,php,string,variables,concatenation,Php,String,Variables,Concatenation,我想知道,在字符串中插入PHP变量的正确方法是什么? 这样: echo "Welcome ".$name."!" echo "Welcome $name!" 或者这样: echo "Welcome ".$name."!" echo "Welcome $name!" 这两种方法都适用于我的PHPV5.3.5。后者更短更简单,但我不确定前者是更好的格式还是更合适。在这两种语法之间,你真的应该选择你喜欢的一种:-) 就我个人而言,在这种情况下,我会使用您的第二种解决方案(变量插值),我发现它

我想知道,在字符串中插入PHP变量的正确方法是什么?

这样:

echo "Welcome ".$name."!"
echo "Welcome $name!"
或者这样:

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

这两种方法都适用于我的
PHPV5.3.5
。后者更短更简单,但我不确定前者是更好的格式还是更合适。

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

就我个人而言,在这种情况下,我会使用您的第二种解决方案(变量插值),我发现它更易于编写和读取

结果是一样的;即使存在性能影响,这些也无关紧要1


作为旁注,我的答案更完整一点:有一天你会想做这样的事情:

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

那天,您需要使用
{}

echo "Welcome {$name}s!"
不需要回退到连接


还要注意,您的第一个语法:

echo "Welcome ".$name."!";
可以使用以下方法进行优化,避免连接:

echo "Welcome ", $name, "!";
(但是,正如我前面所说,这并不重要……)



1-除非你在做数十万次的串联和插值,否则情况可能不是这样。

你应该选择第一个。除了性能上的差异外,它们没有什么区别。第一个比第二个快

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

看看这个

这是另一个例子

我不明白为什么上面链接中的这个答案会被投赞成票,为什么这个答案会被投反对票

就像我说的一样

你也可以看看这里


两个都可以。使用对您有更好可见性的。说到可见性,您也可以查看。

使用第一个并使用单引号

  • 它更容易阅读,这意味着其他程序员将知道发生了什么
  • 它的工作速度稍微快一点,就像PHP解析源代码时创建操作码的方式一样,它基本上可以做到这一点,所以请伸出援助之手
  • 如果您也使用单引号而不是双引号,那么您的性能将得到更大的提升
  • 只有当您需要
    \r
    \n
    \t
    时,才应该使用双引号! 在任何其他情况下都不值得使用开销


    你还应该检查一些不同做事方法的基准。

    这只是品味的问题。
    想用什么就用什么

    大多数情况下,我使用第二个,但这取决于


    我还建议您自己找一个好的编辑器,它将突出显示字符串内部的变量

    双引号字符串更优雅,因为您不必每次需要插入变量时都打断字符串(就像您必须使用单引号字符串一样)

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

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

    不要连接。不需要,us逗号as echo可以接受多个参数

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

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

    从使思考变得简单的角度来看,可读性一致性易于理解(因为性能在这里并不重要):

    • 当您想要嵌入对象属性、多维数组等时,在双引号中使用嵌入变量可能会导致复杂和混乱的情况。 也就是说,通常在读取嵌入式变量时,您无法立即100%确定所读取内容的最终行为

    • 您经常需要添加拐杖,如
      {}
      \
      ,这会增加混淆,并使串联可读性几乎相等(如果不是更好的话)

    • 只要您需要围绕var包装函数调用,例如
      htmlspecialchars($var)
      ,就必须切换到串联

    • 好的,你不能嵌入常量


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

    我知道这个问题已经有了选择的答案,但我发现这显然表明字符串插值比串联工作得更快。它可能对那些仍有疑问的人有所帮助。

    因为php4,您可以使用字符串格式化程序:

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

    来源:

    我知道这是一个老问题,但我认为必须有人提及所有的利弊:

    更好的语法:这是个人偏好

    性能:无差异。正如许多人提到的,如果使用不现实的多个变量,双引号可能会更快

    更好的用法:单引号(大部分)。正如@Khez所说,使用单引号可以连接任何内容,甚至函数调用和变量修改,比如:
    echo'hi'。修剪($name)。(一加一)。双引号所能做的唯一一件单引号所不能做的事情就是使用
    \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个字符(
    echo "Number $i!";
    
    echo "Number " . ($i + 1) . "!";
    
    $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}";