未定义的偏移:检查函数是否设置时为1

时间:2014-03-08 14:52:56

标签: php isset

$s = "text";
$exploded_s = explode('/', $s);
//$s2 = isset_or($exploded_s[1], "empty"); //This shows notice Undefined offset: 1
$s2 = isset($exploded_s[1]) ? $exploded_s[1] : "empty"; //This is ok
echo $s2;

function isset_or($var, $val){
    return isset($var) ? $var : $val;
}

两者都返回“空”但第一种方式也显示通知。为什么呢?

2 个答案:

答案 0 :(得分:2)

您按值传递$var - 因为它没有(并且未设置)您收到通知。但是,如果您pass by reference它将起作用。

function isset_or(&$var, $val){
    return isset($var) ? $var : $val;
}

答案 1 :(得分:1)

因为$exploded_s[1]被评估为将值传递给isset_or,因为您的函数指定按值传递参数。

使用isset时,不会评估$exploded_s[1]的值,因为它是通过引用传递的;本质上是传递内存地址,如果没有未定义,则存储数组中第二个元素的值。

此处提供更多信息:What's the difference between passing by reference vs. passing by value?