php中如何拼接字符串变量,关于PHP:PHP-连接或直接在字符串中插入变量

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

这样:

echo"Welcome".$name."!"

或这样:

echo"Welcome $name!"

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

如果您是第一个,我个人更喜欢单引号echo Welcome .$name.!;

php.net/manual/zh/

@ kjy112我在回答中说了同样的话,我是单引号的巨大粉丝:X

单引号与双引号的性能,但是对于这样的事情,您不会注意到太多:stackoverflow.com/questions/482202/

我个人不理会整个"单引号更有效",而只是选择"使用需要最后内部转义的任何一种引号样式"。 由于较少的字符串解析v.s,因此您编写的任何代码极不可能从任何MICROSCOPIC收益中受益。 增加字符串连接。

@ kjy112第二种方法可以使用单引号吗?

绩效损失索赔是错误的。 请参阅此文章作为参考:nikic.github.io/2012/01/09/

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

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

结果将是相同的;即使有性能影响,也没关系1。

作为旁注,所以我的回答更加完整:那天您要做这样的事情:

echo"Welcome $names!";

PHP将解释您的代码,就像您尝试使用$names变量一样-该变量不存在。

-请注意,只有在您的字符串中使用" not"时,它才有效。

那天,您需要使用{}:

echo"Welcome {$name}s!"

无需回退到串联。

另请注意,您的第一个语法:

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

可以使用以下方法进行优化,避免串联:

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

(但是,正如我之前说的,这无关紧要...)

1-除非您要进行数十万个级联与插值运算-情况可能并非如此。 sub>

非常好,谢谢!很高兴知道我可以使用我喜欢的方法将其直接插入到字符串中,并且非常感谢现在知道如何在需要使用{}的情况下将变量与其余字符串分开。

请注意,用逗号分隔字符串文字和变量仅适用于echo,不适用于其他任何地方。

只是指出性能:time php -r $string=""; for ($i=0;$i<199999;$i++){ $string = $string.$i; } print("Done!

");(并置)实际上损失了约300毫秒(对于200.000项,这就是您设置的每千个元素1 miliseconf ...)。多数民众赞成在统计噪音,它甚至无法衡量任何差异。考虑到它的可读性更好,time php -r $string=""; for ($i=0;$i<199999;$i++){ $string ="{$string}{$i}"; } print("Done!

");(插值)无疑是赢家。

如果要使用插值,则必须使用双引号。

是否可以在字符串中使用函数?像回声"这是{foo()}不错"; ?

用双引号引起来的字符串更优雅,因为您不必每次都需要插入变量时就将其分解(就像必须使用单引号引起来的字符串一样)。

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

//syntax error!!

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

//the only option

$s ="Hello" . trim($world) ."!";

您可以通过PHP 5.3变量函数将函数半间接地插入字符串中。 $x = function() { ...}; $string ="hello {$x(blah blah blah)}",用于"限制"。

@马克那很酷,我不知道!您还可以将现有函数的名称分配给变量并执行相同的操作:$x = trim; $string ="hello {$x(blah blah blah)}";

多数民众赞成在很酷,但非常不可读,因此,无论如何都必须避免它。

@col。完全弹片。

$s = Hello . trim($world) .!;在字符串中没有要插入的内容时尝试使用单引号,它将提高性能并且可以用作识别两者的约定

从php4开始,您可以使用字符串格式化程序:

$num = 5;

$word = 'banana';

$format = 'can you say %d times the word %s';

echo sprintf($format, $num, $word);

资料来源:sprintf()

到目前为止,最安全的选择。 +1是指与其他语言匹配的良好做法和常规惯例

两者都可以。使用对您而言可见性更好的一种。说到可见性,您还可以签出printf。

我知道这个问题已经有了一个选择的答案,但是我发现这篇文章显然表明字符串插值比串联快。对于仍存疑问的人可能会有所帮助。

从使思想变得简单,可读,一致和易于理解的角度考虑(因为此处的性能无关紧要):

当您要嵌入对象属性,多维数组等时,在双引号中使用嵌入式var可能导致复杂而混乱的情况。

也就是说,通常在读取嵌入式var时,您不能立即100%确定所读取内容的最终行为。

您经常需要添加拐杖,例如{}和\,这会使IMO加添混乱,并使串联可读性几乎相等,甚至更好。

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

AFAIK,您不能嵌入常量。

在某些特定情况下,"带有vars嵌入的双引号"可能会有用,但是一般而言,我会进行级联(在方便时使用单引号或双引号)

首先,使用单引号!

它更易于阅读,这意味着其他程序员将知道发生了什么

它的工作速度稍快,PHP解析源代码时创建操作码的方式,无论如何基本上都可以做到,所以请帮忙!

如果您还使用单引号而不是双引号,则可以进一步提高性能。

应该使用双引号的唯一情况是需要,,\t!

在任何其他情况下使用开销只是不值得的。

您还应该检查PHP变量串联,phpbench.com,以了解有关不同处理方法的一些基准。

-1:使用单引号对性能没有任何现实影响。链接的页面显示两种方法之间的差异(以微秒为单位),即0.000001秒。任何一次数据库查询都将花费数百倍的时间。这场辩论完全没有意义。

提及,和\t的好处是,其他答案未包含此位。

不要串联。不需要,我们用逗号分隔,因为echo可以采用多个参数

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

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

不过,这仅适用于回声。尝试使用它进行变量分配,并观察代码爆炸。

只是味道。

使用任何您想要的。

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

让我建议您也让自己成为一个好的编辑器,该编辑器将突出显示字符串中的变量

我有需要的textarea。 PSPad岩石。

如果要执行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]')";

您应该选择第一个。它们没有区别,只是第一个的性能比第二个的快。

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

签出此单引号或双引号进行变量串联吗?

这是另一个示例。在PHP中,单引号和双引号是否有性能优势?

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

正如我说的一样。

您也可以在这里看

PHP,单引号或双引号的速度更快?

-1用于过早的优化。除非您在一个脚本中打印数百万次,否则性能的差异不足以成为一个因素-即便如此,您执行的任何其他处理也会使您可能花费一种方式而不是另一种方式打印的额外几秒钟相形见war。它们之间的主要区别是可读性(这使我更喜欢第二种样式)。

我可以尝试回答您的最后一个问题。 PHP社区中有许多荒唐的谣言,其中有些非常强烈。披露这些消息需要花费很多时间,这是它的巨大努力。但是慢慢地改变它。因此,您链接到的答案是旧的,从人们不在乎的时代开始。在这篇文章中,有些人是根据自己的经验回答的,而不是根据他们阅读的某些文章回答的。

性能损失为+1 @cHao。这是一篇带有度量证明的文章。 nikic.github.io/2012/01/09/

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

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

性能:无差异。如许多人所述,如果使用了不切实际的变量,双引号可能会更快。

更好的用法:单引号(大多数情况下)。正如@Khez所说,您可以使用单引号将任何内容连接起来,甚至包括函数调用和变量修改,例如:echo 'hi ' . trim($name) . ($i + 1);。双引号只能做的,单引号不能做的是,,\t等的用法。

可读性:没什么区别(可能适用个人喜好)。

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

$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,所以它就像:

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

但是对于双引号,您将需要更改以下内容:

echo"Number $i!";

对此:

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

结论:使用您喜欢的东西。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值