2013-01-19 99 views
1

任何人都可以請向我解釋爲什麼下面的代碼行打印出來的真實?isset奇怪的行爲和處理函數返回的數據

$a = "string"; 

if(isset($a['error'])) echo true; else echo false; 

當我做一個函數調用,我返回預期的數據,如果一切正常,或返回array("error" => $error);

然後在接收到返回的數據後,我檢查isset($ var ['error']),如果沒有,那麼我知道我收到了一些預期的數據。

我也很感激,如果你能指教我,如果這是一種好的或壞的方式處理函數調用之間的數據?如果有更好的「良好做法」。

+0

在特殊情況下使用異常。你不應該誤用狀態信息的返回值。另請注意,您的方法與5.4的行爲不同。 http://codepad.viper-7.com/11HMOS – KingCrunch

+0

[Wello!](http://www.reddit.com/r/lolphp/comments/11xn3a/guess_the_value_of_foo/) – melpomene

+0

爲什麼我的問題得到-1?這對專家來說不是一個足夠好的問題嗎? –

回答

3

好吧,這是PHP的一些錯誤行爲,幸運的是它已經在最近的一些版本中得到修復。

您可以使用用於處理數組元素的相同方括號來處理字符串中的單個字符。

'error'評估爲0,然後您得到$a[0]這是設置。

來解決,你必須檢查,如果$ a數組第一

+0

這是一個錯誤,因爲如果你使用'$ a = str_split(「string)」;; :)就會發生奇蹟 – Peter

+0

謝謝!我不知道是這樣。 –

0

我不是100%肯定,爲什麼行爲是這樣的,但我確實知道,PHP允許您處理類似的方式串作爲一個數組。

$a = "StackOverflow"; 

echo $a[2]; // a 
echo $a[4]; // k 
echo $a[6]; // v 
echo $a[8]; // r 

現在,當您將字符串鍵作爲數組的索引傳遞時,PHP將嘗試將該字符串解析爲數字值以用作鍵。

echo $a['stack']; // S 
echo $a['over']; // S 
echo $a['flow']; // S 

echo $a['0stack']; // S 
echo $a['1over']; // t 
echo $a['2flow']; // a 
echo $a['3flow']; // c 
echo $a['4flow']; // k 
+0

@melpomene耶'作爲intval('5abcde');'是'5' – Peter

+0

@mel -true true true ...感謝你 - 我做了一些編輯。 – Lix

+0

謝謝你 –