我已经使用自定义__isset()
功能已经很长时间了,这基本上只是为了让代码看起来更好并节省打字时间:
function __isset(&$aVariable, $aDefault = null) {
return isset($aVariable) ? $aVariable : $aDefault;
}
但今天我发现这个函数实际上是创建变量,如果它不存在!当您检查数组属性时,这是一个很大的问题:
$lArray = ('A', 'B', 'C');
$lValue = __isset($lArray[4], 'D');
print_r($lArray); // Outputs 0=>'A', 1=>'B', 2=>'C', 3=>NULL
所以我想要的是从PHP复制当前的isset()
函数并将其更改为我想要的。问题是我在PHP源代码中找不到实际的isset()
函数......
许多框架正在使用isset()
函数,就像我在第一个示例中所示,我无法想象我是第一个碰到这个问题的人。
所以我的问题是:
isset()
PHP函数?isset()
C函数(真正的实现)?答案 0 :(得分:3)
为什么这一切?删除&
,就是这样:
function __isset($aVariable, $aDefault = null) {
return isset($aVariable) ? $aVariable : $aDefault;
}
答案 1 :(得分:0)
$lArray = array('A','B','C');
$LValue = array_key_exists(2, $lArray)?$lArray[2]:'D';
echo $LValue;
确定您必须将__isset修改为特殊句柄数组
答案 2 :(得分:0)
删除&
符号alone
会生成Notice: Undefined offset: 4 in
我认为您应该删除&
并使用{{1}删除任何E_NOTICE error
};
@
输出(没有E_NOTICE错误)
$lArray = array('A', 'B', 'C');
$lValue = __isset(@$lArray[4], 'D'); // or @__isset($lArray[4], 'D');
var_dump($lValue);
var_dump($lArray);
function __isset($aVariable, $aDefault = null) {
return isset($aVariable) ? $aVariable : $aDefault ;
}
另一个解决方案是使用另一个string 'D' (length=1)
array
0 => string 'A' (length=1)
1 => string 'B' (length=1)
2 => string 'C' (length=1)
来管理数组和对象
isset
最后,你可以自己覆盖PHP isset函数,看看override_function