复制PHP函数isset

时间:2012-10-04 09:35:06

标签: php isset

我已经使用自定义__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()函数,就像我在第一个示例中所示,我无法想象我是第一个碰到这个问题的人。

所以我的问题是:

  1. 我在哪里可以找到实际的isset() PHP函数?
  2. 我在哪里可以找到实际的isset() C函数(真正的实现)?
  3. 如何更改代码以使其返回值或指定的默认值?

3 个答案:

答案 0 :(得分:3)

为什么这一切?删除&,就是这样:

function __isset($aVariable, $aDefault = null) {
    return isset($aVariable) ? $aVariable : $aDefault;
}

答案 1 :(得分:0)

使用array_key_exist

检查实际比较之前是否存在数组键
$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