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

Php isset奇怪行为和处理函数返回的数据,php,isset,Php,Isset,谁能给我解释一下为什么下面这行代码是真的 $a = "string"; if(isset($a['error'])) echo true; else echo false; 当我执行函数调用时,如果它工作正常,我将返回预期的数据,或者返回数组(“error”=>$error) 然后在收到返回的数据时,我检查isset($var['error']),如果不是,那么我知道我收到了一些预期的数据 如果您能告诉我这是处理函数调用之间数据的好方法还是坏方法,我也将不胜感激?如果有更好的“良好实践”来解

谁能给我解释一下为什么下面这行代码是真的

$a = "string";

if(isset($a['error'])) echo true; else echo false;
当我执行函数调用时,如果它工作正常,我将返回预期的数据,或者返回
数组(“error”=>$error)

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


如果您能告诉我这是处理函数调用之间数据的好方法还是坏方法,我也将不胜感激?如果有更好的“良好实践”来解决这个问题。

我相信这是一个bug,它在PHP5.4+中得到了修复:

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

处理错误的最佳方法是例外:


好吧,这是PHP的一些错误行为,幸运的是在最近的一些版本中得到了修复

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

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


要解决这个问题,您必须首先检查$a是否为数组

我不能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

在异常情况下使用异常。您不应该滥用状态信息的返回值。另外请注意,您的方法在5.4中的表现将有所不同。为什么我的问题得a-1?对于专家们来说,这不是一个足够好的问题吗?这是一个bug,如果你使用
$a=str_split(“string)”,就会发生神奇的事情:)谢谢!我不知道是这样。@melpomene yeah as
intval('5abcde')
5
@mel-true。。。谢谢你,我做了一些编辑。