53

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

串联:

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

大括号:

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

就个人而言,我总是连接我的字符串,因为我使用UEStudio,它在连接时以不同的颜色突出显示 PHP 变量。但是,当变量没有被打破时,它不会。它只是让我的眼睛更容易在长字符串等中找到 PHP 变量。

人们对 SQL 感到困惑。这 不是 这个问题的目的。我已经更新了我的示例以避免混淆。

4

3 回答 3

57

如果您查看输出,则以下所有操作都相同。

  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)等字符,则必须在双引号内。

通常变量插值很慢,但如果要连接的变量太多,连接也可能会更慢。因此决定取决于其他字符中有多少变量。

于 2011-01-13T04:31:36.380 回答
3

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

重要的是要记住编码开始时的安全性——而不是结束时需要重做所有代码以符合安全要求。或者,当你最终结束这场“与”战争并意识到这并不重要,因为在没有正确编码和验证所有输入的情况下,使用这两种技术都容易受到 XSS 的影响。

  1. 使用urlencode()htmlenities ()进行编码以规范化输入。
  2. 对非字符串使用数据类型字典查找和/或对字符串的正则表达式进行验证
  3. 利润?
于 2011-12-20T16:59:36.537 回答
3

使用预编译的 PHP(字节码缓存)没有区别。

此功能随 PHP 5.5 (Zend Optimizer+) 提供。

于 2015-05-07T12:45:39.270 回答