2011-06-30 25 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

正如其他人所說,安全只是速度/偏好沒有區別。

但有一點要補充,不要逃避對飛輸出。最好在數據庫存儲到數據庫(單個請求)之前過濾它,然後在每個請求中繼續使用它。