2011-06-30 22 views
1

以下所有命令都能正常工作,但在安全性,兼容性,速度和其他惯例方面哪一个都被认为是正确的?具有多个变量的回声字符串

//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 />'; 
+0

第四:回声$行向>如first_name,$行向>姓氏, '
'; – Sinan

+1

答案中的第三个选项并不完全相同;你错过了'回声';'。 – icktoofay

+1

使用“{$按行> FIRST_NAME}”,而不是“$按行> FIRST_NAME” – Chris

回答

3

虽然不是您指定的样式之一,但我建议使用大括号作为回显字符串,主要在兼容性说明中使用。

echo "Welcome back, {$row->first_name} {$row->last_name}"; 

有关此类语法的更多信息,请参见PHP Strings

1

只要你有所有的转义/编码正确,它们都可以。我会与第一个一起去,因为它是最短和最容易阅读的。

编辑:我只是做了一个小基准,第二种方法是最慢的。第一种方法是第二慢的。第三种方法是你发布的方法中速度最快的,但思南公司建议的方法就像性能一样。

+0

我测试了不同的方法并发布了我的结果,但我不确定它们的准确程度。如果其他人想要对它进行基准测试,请这样做。 – icktoofay

+0

+1作为基准。 – CyberJunkie

4

在您发布的选择中,安全性方面完全没有区别。我会去的东西沿着线:

<p class="name"><?php echo htmlspecialchars("$row->first_name $row->last_name"); ?></p> 
  • 没有<br />,他们通常不是一个好的选择
  • 使用类
  • 逃生输出(安全做你的CSS样式! )从PHP
  • 独立的HTML值
  • 最小的语法
  • 的速度差异并不重要
+0

对于“从PHP值中分离HTML”,您可能需要按照D弗兰克的回答。 IE'{$ row-> thing} s'与“未定义的属性”'$ row-> things'。 –

+0

@bob在这种情况下没有歧义,所以它没有区别。如果你要“复合”你的琴弦,当然,这是一个有效的担忧。另外,HTML在哪里? – deceze

+0

我认为这种情况可能是不明确的(对象属性的一个随机例子嵌入在字符串中),所以一个普遍的答案(您的组合和D弗兰克的提及)可能是最好的。但这只是我的看法。 Re:“那里涉及的HTML在哪里”,它是指最终/实际文本输出的“s”。我可能误解了。 –

1

他们都很好。

就速度而言,第一个选项可能是最快的也是最烦人的阅读。第三个只是哑巴。

我会用第二个去,因为这是如何我已经看到它在商业PHP软件使用

+1

第一个选项可能是* slowest *,因为PHP必须解析字符串的变量替换。 – deceze

+0

@deceze,人类会觉察缓慢吗?或者是否值得注意的是,如果在循环中多次回显字符串? – CyberJunkie

+1

@Cyber​​如果有疑问,*个人资料*这两种方式,但很难形象,你会进入一个情况,你真的注意到它。 – deceze

1

排名第一的是最好的选择,它是可读的,最有可能的最快的,尽管不必解析为PHP变量(与多重连接相比)。 SO问题here演示了级联如何降低你的速度。第三个选项显然是不可读的,并且由于最后的连接而相对较慢。他们都没有任何安全问题,甚至性能上的收益也可以忽略不计 - 对于这种事情你的目标应该是可读性。

+0

级联比解析速度快:http://codepad.org/tXU5LAkQ。您链接的问题比较了非串联与串联,而不是串联与解析。 – deceze

+1

@deceze变量只需要解析一次,就可以建立多重连接 - 在他的示例中可能不会发生,但在更复杂的字符串解析中会更快。 – ajnatural

+0

好的,批准的,对于许多字符串解析的大规模连接可能会更快。最后,尽管在这个尺度上的细小弦乐并不重要。 – deceze

1

我想说,更明确是最好的方法。我也希望PHP花费更长的时间解析1,因为它必须确定标记是字符串内部的变量还是字符串的一部分。我倾向于2,但有时你可能不得不把你的字符串分成新的行,因为保持东西像72列,符合代码样式指南。我建议的是查找不同的代码风格指南,比如Zend的代码风格指南(http://framework.zend.com/manual/en/coding-standard.coding-style.html)。

1

正如其他人所说,安全只是速度/偏好没有区别。

但有一点要补充,不要逃避对飞输出。最好在数据库存储到数据库(单个请求)之前过滤它,然后在每个请求中继续使用它。