2010-03-05 92 views
6

我只是想優化我的代碼。 我需要預填充數據庫中的數據,我需要檢查是否存在變量來填充文本框(我不喜歡@錯誤隱藏)。 表格很長,然後我需要多次檢查變量是否存在。

以下兩者中的哪一個更快?

  • if (isset ($item))
  • if ($item_exists==true)

甚至

  • if ($item_exists===true)
+3

你可以與如果'麻煩($ foo的==真)',如果$ foo是零,這是有效的呢? – 2010-03-05 20:34:05

+0

==和===情況下的性能損失是因爲變量不存在而引發E_NOTICE錯誤。投擲錯誤相對昂貴。當您調用isset()時,如果該變量不存在,則不會引發錯誤。 – 2010-03-05 22:07:30

回答

7

我敢肯定是有性能差異;我確定它已經在某個地方進行了基準測試;但我也確定它對真實世界的目的根本不重要。任何可實現的增益都在毫秒級,更重要的是,代碼的可讀性和避免警告(無論是否輸出都會降低性能)。

如果您無法確定它在您訪問時設置,您可能需要isset。類型安全比較===應該不是必需的,如果$item_exists總是一個布爾值,但它也不會有害。因此,根據您的情況,您可能需要

if ((isset($item)) and ($item_exists === true)) 
+0

感謝您的回答佩卡。 – earlyriser 2010-03-08 13:25:38

+0

最好使用'if(empty($ item))'而不是那個代碼。 – Ariel 2014-04-03 00:54:50

11

在這種情況下,你不應該問的性能,但約正確性第一。因爲isset的行爲不像布爾轉換並與的真實(請參閱type comparison table)相比較。尤其值""(空字符串),array()(空陣列),false0"0"0作爲字符串)的處理方式不同。

+1

+1。除了比較表中的差異之外,對未聲明的變量使用比較運算符會導致E_NOTICE。 – 2010-03-05 22:09:33

1

儘管如此,最有可能的是isset()和「===」將是最快的,因爲它們只檢查一個條件,其中==檢查多個條件並且速度較慢。我還沒有正式測試過這個,但我認爲它是正確的。 @Pekka也是正確的,如果你正在尋求優化,這些真的不會是你做它的地方。因爲它可能需要幾千個電話才能注意到幾毫秒的差異。

22

隨着for循環重複它千萬次相同的腳本了:

  • if (isset ($item)) 2.25843787193
  • if ($item_exists==true) 6.25483512878
  • if ($item_exists===true) 5.99481105804

所以我可以告訴isset確實比較快。

+0

+1做基準測試。它也表明它沒有真正的區別 - 對於PHP腳本來說,執行一千萬次操作是極其罕見的,通常,數據庫/文件I/O開銷將大大增加所需的時間。 – 2010-03-05 20:45:22

+0

什麼是$ item_exists?我認爲「==」可能因其類型而異 – Seaux 2010-03-05 20:51:36

+2

要添加到數字遊戲:無論哪種方式都是0.0000001秒。這意味着你必須每頁做大約1,000,000次才能成爲用戶會注意到的事情(假設用戶會注意到0.1秒)。 簡而言之,這種微型優化很少會有所作爲。 – 2010-03-05 21:12:25

-1

只有一種方法可以優化代碼,稱爲「性能分析」。首先你要知道什麼部分代碼需要優化。只有運行測試,找到解決方案等。

Marcx的回答中的「盤旋」方法也很糟糕。如果您想測試代碼是否有真正的差異,請使用Apache基準測試工具從瀏覽器的角度對其進行測試。

0

我建議以下選擇:

if (@$item) 
if (@$item_exists) 
相關問題