1

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

$a = "string";

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

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

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

如果您能建议我这是在函数调用之间处理数据的好方法还是坏方法,我也将不胜感激?如果对此有更好的“良好做法”。

4

3 回答 3

3

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

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

'error'评估为 0,然后你得到了$a[0]哪个设置。

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

于 2013-01-19T12:41:57.930 回答
0

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

看起来与, where和are 字符串isset($str[$key])的方式相同isset($str[intval($key)])$str$key

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

于 2013-01-19T12:41:56.657 回答
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
于 2013-01-19T12:42:40.847 回答