Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我应该在字符串中使用花括号还是串联变量?_Php_Concatenation_Curly Braces - Fatal编程技术网

Php 我应该在字符串中使用花括号还是串联变量?

Php 我应该在字符串中使用花括号还是串联变量?,php,concatenation,curly-braces,Php,Concatenation,Curly Braces,在字符串中串联变量或使用大括号是否有优势或劣势 连接: $greeting = "Welcome, " . $name . "!"; $greeting = "Welcome, {$name}!"; 花括号: $greeting = "Welcome, " . $name . "!"; $greeting = "Welcome, {$name}!"; 就我个人而言,我总是连接我的字符串,因为我使用,当连接时,它用不同的颜色突出显示PHP变量。但是,当变量未被分解时,它不会被分解。它只是让

在字符串中串联变量或使用大括号是否有优势或劣势

连接:

$greeting = "Welcome, " . $name . "!";
$greeting = "Welcome, {$name}!";
花括号:

$greeting = "Welcome, " . $name . "!";
$greeting = "Welcome, {$name}!";
就我个人而言,我总是连接我的字符串,因为我使用,当连接时,它用不同的颜色突出显示PHP变量。但是,当变量未被分解时,它不会被分解。它只是让我的眼睛更容易在长字符串中找到PHP变量,等等


人们对SQL的存在感到困惑。这是而不是这个问题是关于什么的。我已经更新了我的示例以避免混淆。

如果您查看输出,下面的所有操作都是相同的

  • $greeting=“欢迎,”$名称"!";
  • $greeting='欢迎'$名字
  • $greeting=“欢迎,$name!”
  • $greeting=“欢迎,{$name}!”
  • 您不应该使用选项1,而是使用选项2。选项3和选项4都是相同的。对于简单变量,大括号是可选的。但如果您使用的是数组元素,则必须使用大括号;e、 g.:
    $greeting=“欢迎,{$user['name']}!”。因此,作为标准,如果使用变量插值,则使用大括号,而不是串联

    但是,如果使用了tab(
    \t
    )、新行(
    \n
    )等字符,则它们必须位于双引号内


    通常,变量插值速度很慢,但如果要连接的变量太多,则连接速度也可能较慢。因此,根据其他字符中的变量数量来决定。尽管不处理注入攻击(包括SQLi),至少应该注意,特别是对于PHP开发人员来说,如果不首先对所有输入进行编码和验证,就使用上述任何技术,将导致基于注入的攻击

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

  • 编码使用urlencode()或htmlenities()对输入进行规范化
  • 对非字符串字典查找使用数据类型和/或对字符串使用正则表达式进行验证
  • 利润
  • 对于预先定制的PHP(字节码缓存),这没有什么区别


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

    重复了太多的问题,包括(这更像是一个单引号与双引号的问题,但无论如何,大括号只能用于双引号字符串)是的,我似乎是这里唯一一个意识到你的问题不是专门关于SQL的人(因此我说“离题”).PhpStorm正确地突出显示了引号中单独引用的变量。感谢您的详细解释。我相信我会继续在大括号上串联。真的。@irigo单引号微优化神话一直是深思熟虑的。除非您有一个2GB的php脚本,其中包含数百万个字符串,否则您将无法e来衡量它-因为它只存在于标记器中。使用xdebug并找到一些真实的东西来优化。当我们开发用于并发访问的网站时,我们必须尽可能优化编码/网页。数组元素不需要花括号。只需去掉单引号:$greeting=“Welcome,$user[name]"; 这是唯一一次$user[name]不会引起通知。表示不使用花括号surlencode()对数组元素进行种子封装,不应使用htmlenities()规范化输入。相反,它们应该在输出到浏览器之前使用,用户输入的数据不应该包含HTML、JS或CSS。如果您使用SQL,请始终使用准备好的语句。随着时间的推移,即使是最善意的字符串Santizer也受到了各种攻击的彻底打击。准备好的语句将逻辑与数据清晰地分开,提供了更高效的数据插入和检索,数据库领域的专家对安全性进行了仔细检查。或者使用一个经过战斗的ORM(如果您重视性能和类型安全,最好是数据映射而不是活动记录类型)