我应该在字符串中使用大括号还是连接变量?

问题描述 投票:44回答:3

在字符串中连接变量或使用大括号是否有优点或缺点?

级联:

$greeting = "Welcome, " . $name . "!";

大括号:

$greeting = "Welcome, {$name}!";

个人而言,我一直将字符串串联在一起,因为我使用了UEStudio,并且在串联时会用不同的颜色突出显示PHP变量。但是,如果不分解变量,则不会。它使我的眼睛更容易找到长字符串中的PHP变量,等等。

人们对有关SQL感到困惑。这是 not 这个问题是关于什么的。我已更新示例以避免混淆。

php concatenation curly-braces
3个回答
46
投票

如果查看输出,以下所有内容都相同。

  1. $greeting = "Welcome, " . $name . "!";
  2. $greeting = 'Welcome, ' . $name . '!';
  3. $greeting = "Welcome, $name!";
  4. $greeting = "Welcome, {$name}!";

您不应该使用选项1,而应使用选项2。选项3和4相同。对于简单变量,花括号是可选的。但是,如果使用数组元素,则必须使用花括号;例如:$greeting = "Welcome, {$user['name']}!";。因此,作为标准,如果使用变量插值而不是串联,则使用花括号。

但是如果使用制表符(\t),换行符[\n)之类的字符,则它们必须在双引号内。

通常,变量插值比较慢,但是如果要连接的变量太多,则串联也可能较慢。因此,请根据其他字符中的变量来决定。


3
投票

尽管不处理注入攻击(包括SQLi),但至少应注意-特别是对于PHP开发人员-使用上述任何一种技术而不先进行编码和验证所有输入将会导致您基于注入的攻击。

重要的是在编码开始时记住安全性,而不是在需要重做所有代码以符合安全性要求时结束时记住安全性。或者,当您最终弄清这个“ vs.”的冲突时,意识到这没关系,因为您可以使用任何一种技术对XSS敏感,而无需正确地编码和验证所有输入。

  1. Encode使用urlencode()htmlenities()标准化输入。
  2. 将数据类型用于非字符串OR
  3. 词典查找和/或正则表达式用于将字符串[利润?

2
投票
使用预编译的PHP(字节码缓存)没有什么区别。
© www.soinside.com 2019 - 2024. All rights reserved.