$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;
}
两者都返回“空”但第一种方式也显示通知。为什么呢?
答案 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?