Php 多变量回显字符串
以下所有命令都可以工作,但在安全性、兼容性、速度和其他约定方面,哪一个命令被认为是正确的Php 多变量回显字符串,php,html,Php,Html,以下所有命令都可以工作,但在安全性、兼容性、速度和其他约定方面,哪一个命令被认为是正确的 //one echo "$row->first_name $row->last_name <br />"; //two echo $row->first_name . ' ' . $row->last_name .'<br />'; //three echo $row->first_name; echo $row->last_name; ech
//one
echo "$row->first_name $row->last_name <br />";
//two
echo $row->first_name . ' ' . $row->last_name .'<br />';
//three
echo $row->first_name;
echo $row->last_name;
echo '<br />';
//一个
回显“$row->first_name$row->last_name
”;
//两个
echo$row->first_name.'''$行->姓氏。“
”;
//三
echo$row->first\u name;
echo$行->姓氏;
回声“
”;
只要所有转义/编码都正确,它们都可以。我会选择第一本,因为它是最短、最容易阅读的
编辑:我刚刚做了一个小的基准测试,第二种方法是最慢的。第一种方法是第二种最慢的方法。第三种方法是你发布的方法中速度最快的,但西南建议的方法也同样有效。你发布的方法在安全性方面绝对没有区别。我会选择以下几点:
<p class="name"><?php echo htmlspecialchars("$row->first_name $row->last_name"); ?></p>
- 不,它们通常不是一个好的选择
- 使用类在CSS中进行样式设置
- 转义输出(安全!!)
- 将HTML与PHP值分开
- 最小语法
- 速度差无关紧要
echo "Welcome back, {$row->first_name} {$row->last_name}";
有关这类语法的更多信息,请参见。所有这些都很好
就速度而言,第一个选项可能是最快的,但也是最烦人的。。
第三个就是哑巴
我会选择第二个,因为这就是我在商业php软件中使用它的方式。第一个是最好的选择,它是可读的,而且很可能是最快的,尽管php必须解析变量(与多重串联相比)。因此,这个问题说明了连接是如何减慢速度的。第三个选项是完全不可读的,由于最后的连接,速度相对较慢。它们都没有任何类型的安全问题,甚至性能的提高都可以忽略不计——对于这种情况,您的目标应该是可读性。我想说,更加明确是最好的方法。我还认为PHP解析1需要更长的时间,因为它必须确定标记是字符串中的变量还是字符串的一部分。我倾向于2,但有时您可能不得不将字符串拆分为新行,因为为了符合代码样式设计准则,需要将字符串保持在72列以下。我的建议是查找不同的代码风格指南,比如Zend的指南(http://framework.zend.com/manual/en/coding-standard.coding-style.html).正如其他人所说,安全性没有区别,只是速度/偏好不同
但有一点需要补充,那就是不要在运行中逃避输出。最好在它存储到数据库(单个请求)之前对其进行过滤,然后在将来对每个请求继续进行过滤。第一个选项可能是最慢的,因为PHP必须解析字符串以进行变量替换。@deceze,这种慢度会被人类检测到吗?或者在一个循环中多次回显字符串是否值得注意?@Cyber如果有疑问,请从两个方面对其进行分析,但很难想象你会真正注意到它。第四:回显$row->first_name,$row->last_name,“
”;你答案中的第三个选项并不完全相同;您缺少一个
回音“”
。使用“{$row->first_name}”而不是“$row->first_name”@Chris大括号真的必要吗?@Chris nvm,它们似乎是编码标准,适合复杂变量字符串。串联比解析更快:。您链接到的问题比较的是非连接与连接,而不是连接与解析。@deceze变量只需分析一次,就会形成多个连接-在他的示例中可能不会出现这种情况,但在更复杂的字符串中,解析会更快。好的,当然,对于许多字符串的大规模连接,解析可能会更快。最后,对于这种规模的小字符串来说,这其实并不重要。对于“从PHP值中分离HTML”,您可能需要遵从D Franks的答案。IE{$row->things}s
与“undefined property”$row->things
@bob在这种情况下没有歧义,因此没有区别。如果你想让你的字符串“多元化”,当然,这是一个值得关注的问题。还有,HTML在哪里?我认为这个例子可能是不明确的(一个嵌入字符串中的对象属性的随机示例),所以一个广义的答案(你的组合加上D Franks的提及)可能是最好的。不过这只是我的观点。回复:“哪里涉及HTML”,是指最终/实际文本输出的“s”。不过我可能误解了。我对不同的方法进行了基准测试,并公布了结果,但我不确定它们有多准确。如果其他人想对其进行基准测试,请这样做。