2011-05-03 88 views
0

我不明白爲什麼有人在代碼中使用@,我已經看到它與MySQL連接,但我不知道它是什麼意思..謝謝!

$player_name_orig = @$_GET['player']; 
if (!$player_name_orig) { 
    die('You must specify a player name'); 
} 
+2

[?參考 - 這是什麼符號在PHP意味着]可能重複(http://stackoverflow.com/questions/3737139/reference-what -does-這個符號,均在-PHP) – ircmaxell 2011-05-03 19:52:33

回答

13

@是error suppression operator

在這種特定的情況下,這是一個(錯誤!)的方式,以避免PHP給予通知,如果player項不$_GET存在:如果試試這個

unset($_GET['player']); // to make sure 
echo $_GET['player']; 

你得到:

說明:未定義指數:玩家在F:\ dev的\ WWW \的index.php上線

而如果你試試這個:

unset($_GET['player']); // to make sure 
echo @$_GET['player']; 

沒有輸出。

正確的方式做到這一點:

if (empty($_GET['player']) { 
    die('You must specify a player name'); 
} 
2

@將停止出現任何錯誤,並在出現錯誤時返回false。

因此,在你的代碼,如果$_GET['player']不存在,則該代碼將進入if語句

2

@表示忽略錯誤,如不設置變量。

0

的「@」是用來防止任何警告或錯誤信息出現。這是一個非常不好的習慣。這樣做很多隱藏的操作都已完成(刪除錯誤處理程序,然後放回)。

做該操作中的正確的方法是:

// my_security_filter() is a function that can render FALSE and remove any dangerous thing 
$player_name_orig = array_key_exists('player',$_GET)? my_security_filter($_GET['player']) : FALSE; 
if (FALSE===$player_name_orig) { ...