isset奇怪的行为和处理函数返回的数据

时间:2013-01-19 12:33:45

标签: php isset

有人可以向我解释为什么以下代码行打印出来是真的吗?

$a = "string";

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

当我进行函数调用时,如果它正常工作,我会返回预期的数据,或者返回array("error" => $error);

然后在收到返回的数据时,我检查是否isset($ var ['error']),如果不是,那么我知道我收到了一些预期的数据。

如果您能在函数调用之间处理数据的好或坏方法,我还能建议您。如果有更好的“良好实践”。

3 个答案:

答案 0 :(得分:3)

嗯,这是一些PHP错误行为,幸运的是在最近的一些版本中得到了解决。

您可以使用用于寻址数组元素的相同方括号来处理字符串中的单个字符。

'error'的计算结果为0,然后您设置了$a[0]

修复你必须检查$ a是否是第一个数组

答案 1 :(得分:0)

我认为这是一个错误,它已在PHP 5.4+中修复:http://codepad.viper-7.com/fz1rnT

isset($str[$key])相同,

看起来像isset($str[intval($key)]),其中$str$key是字符串

要处理错误,最好的方法是例外:

答案 2 :(得分:0)

我不是百分之百确定为什么行为是这样的,但我知道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
相关问题