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}!”代码>
$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(如果您重视性能和类型安全,最好是数据映射而不是活动记录类型)