我只是想優化我的代碼。 我需要預填充數據庫中的數據,我需要檢查是否存在變量來填充文本框(我不喜歡@
錯誤隱藏)。 表格很長,然後我需要多次檢查變量是否存在。
以下兩者中的哪一個更快?
if (isset ($item))
if ($item_exists==true)
甚至
if ($item_exists===true)
我只是想優化我的代碼。 我需要預填充數據庫中的數據,我需要檢查是否存在變量來填充文本框(我不喜歡@
錯誤隱藏)。 表格很長,然後我需要多次檢查變量是否存在。
以下兩者中的哪一個更快?
if (isset ($item))
if ($item_exists==true)
甚至
if ($item_exists===true)
我敢肯定是有性能差異;我確定它已經在某個地方進行了基準測試;但我也確定它對真實世界的目的根本不重要。任何可實現的增益都在毫秒級,更重要的是,代碼的可讀性和避免警告(無論是否輸出都會降低性能)。
如果您無法確定它在您訪問時設置,您可能需要isset
。類型安全比較===
應該不是必需的,如果$item_exists
總是一個布爾值,但它也不會有害。因此,根據您的情況,您可能需要
if ((isset($item)) and ($item_exists === true))
感謝您的回答佩卡。 – earlyriser 2010-03-08 13:25:38
最好使用'if(empty($ item))'而不是那個代碼。 – Ariel 2014-04-03 00:54:50
在這種情況下,你不應該問的性能,但約正確性第一。因爲isset
的行爲不像布爾轉換並與的真實(請參閱type comparison table)相比較。尤其值""
(空字符串),array()
(空陣列),false
,0
和"0"
(0
作爲字符串)的處理方式不同。
+1。除了比較表中的差異之外,對未聲明的變量使用比較運算符會導致E_NOTICE。 – 2010-03-05 22:09:33
儘管如此,最有可能的是isset()和「===」將是最快的,因爲它們只檢查一個條件,其中==檢查多個條件並且速度較慢。我還沒有正式測試過這個,但我認爲它是正確的。 @Pekka也是正確的,如果你正在尋求優化,這些真的不會是你做它的地方。因爲它可能需要幾千個電話才能注意到幾毫秒的差異。
隨着for
循環重複它千萬次相同的腳本了:
if (isset ($item))
2.25843787193if ($item_exists==true)
6.25483512878if ($item_exists===true)
5.99481105804所以我可以告訴isset
確實比較快。
+1做基準測試。它也表明它沒有真正的區別 - 對於PHP腳本來說,執行一千萬次操作是極其罕見的,通常,數據庫/文件I/O開銷將大大增加所需的時間。 – 2010-03-05 20:45:22
什麼是$ item_exists?我認爲「==」可能因其類型而異 – Seaux 2010-03-05 20:51:36
要添加到數字遊戲:無論哪種方式都是0.0000001秒。這意味着你必須每頁做大約1,000,000次才能成爲用戶會注意到的事情(假設用戶會注意到0.1秒)。 簡而言之,這種微型優化很少會有所作爲。 – 2010-03-05 21:12:25
只有一種方法可以優化代碼,稱爲「性能分析」。首先你要知道什麼部分代碼需要優化。只有運行測試,找到解決方案等。
Marcx的回答中的「盤旋」方法也很糟糕。如果您想測試代碼是否有真正的差異,請使用Apache基準測試工具從瀏覽器的角度對其進行測試。
我建議以下選擇:
if (@$item)
if (@$item_exists)
你可以與如果'麻煩($ foo的==真)',如果$ foo是零,這是有效的呢? – 2010-03-05 20:34:05
==和===情況下的性能損失是因爲變量不存在而引發E_NOTICE錯誤。投擲錯誤相對昂貴。當您調用isset()時,如果該變量不存在,則不會引發錯誤。 – 2010-03-05 22:07:30