2009-10-23 80 views
1

可能重複任何問題:
Reference - What does this symbol mean in PHP?有沒有使用「@」,而寫代碼

有沒有使用任何問題,「@」,同時編寫代碼?它背後的機制是什麼?

+0

在那部分代碼中使用? – 2009-10-23 13:14:50

+4

在存儲電子郵件地址的字符串中,它是完全有效的。使用它作爲錯誤抑制器的 – 2009-10-23 13:20:02

+1

被認爲是不好的編程!這是唯一可以說的。不要使用它!編寫你的代碼,以便你不需要它!錯誤是有目的的,對付他們,不要壓制他們。 – markus 2009-10-24 19:44:45

回答

6

它抑制錯誤報告,所以我想這是調試困難;-)

+0

dang,打我吧。如果只有我沒有去過PHP網站找到鏈接;-) – 2009-10-23 13:17:59

3

PHP中的@ operator是一個錯誤的控制操作。它可以抑制它之前的任何表達式的錯誤。

唯一明顯的問題是,它使你的代碼更難以調試。

編輯:由於評論員問...它實際上是在你想使用可能不存在的變量的情況下相當有用 - 如$ _GET或$ _POST變量。

if (isset($_GET['hello'] && $_GET['hello'] == "yes") {} // without @ 
if (@$_GET['hello'] == "yes") {} // with @ 

一些PHP函數也拋出錯誤以及返回false,所以在這些情況下,您可能要取消錯誤並檢查返回值,而不是try和catch。

+0

爲什麼你會想要抑制某些錯誤?它實際上等同於'try {'...'} catch {}' - 帶有一個空的catch-block - 這通常被認爲是不可接受的,沒有任何藉口(如果你在'catch'中做某事,可能有一個藉口,與一個空的塊)。 – 2009-10-24 04:28:58

+1

被誰認爲是不可接受的?有很多使用@操作符的完全有效的理由,我已經看到它們在許多開源項目中使用,包括Joomla和phpBB。查看我的更新,瞭解一個完全可以接受(並由我推薦)使用@操作符的示例。 – 2009-10-24 19:34:17

+0

@Pavel Minaev導致其PHP?一種語言與更多的初級高級開發人員感知。當人們做這樣的事情時,我很喜歡,因爲當我以4倍的市場價格進入合約來修復它時,它給了我工作保障。 – David 2009-10-24 19:51:37

5

WARNING:目前的「@」錯誤控制 運營商前綴甚至會禁用 錯誤嚴重錯誤 ,將終止腳本執行報告。 除其他事項外,這意味着如果 您使用「@」從 某些功能抑制的錯誤,要麼是不 使用或已被錯誤地輸入時, 腳本會沒有任何跡象 ,爲什麼死在那裏。

1

如果您使用觸發錯誤的外部庫,您可以放心忽略,這會很有用。簡單的例子是,當它無法連接到外部服務觸發一個錯誤,如果你可以推斷出它未能根據從功能,您可以使用@操作符來抑制相對不需要錯誤返回值的庫。

而編碼,雖然,因爲它使調試代碼相當困難的,如果你有沒有錯誤一起工作我從來沒有使用它,只有使用它的代碼,你知道的「作品」,但可以拋出奇錯誤你不感興趣的

0

它不僅會抑制你可能需要了解的錯誤,但無論遇到任何錯誤,它會減慢你的代碼。 @通過臨時設置錯誤報告的php ini設置爲0,然後回到先前的設置。

0

使用@在任何情況下是一個壞主意。評估一些變量幾乎沒有問題

$x = @ $somearray[$somethingelse]; # suppress E_NOTICE if array key is absent 

但在任何其他情況下,它是絕對可怕的。最糟糕的是調用與效應「@」功能 - 全功能和自己的子程序會再與錯誤報告禁用執行。如果其中的任何一個是拋出一個致命的例外,你不知道在哪裏或什麼。

PHP錯誤處理它可怕。但使用@更糟糕。

可悲的是,沒有運營商只是壓制一些(例如只是E_NOTICE和E_WARN)而不是其他運營商。

相關問題