2013-01-19 39 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

谢谢你 –