如果我有以下声明:
$b = empty($a) ? "null" : "'$a'"
为了避免复制和粘贴,我想把它放在一个函数中:
function x($a) {
return empty($a) ? "null" : "'$a'"
}
所以我能做到:
$b = x($a); // $a is not defined, so PHP complains
$d = x($c); // same with $c
然后我会从PHP收到错误,因为$a
未定义。有没有办法实现这一点,除了使用@
运算符?
编辑:我在调用x()时引用错误,而不是x()内部。你知道,你可以对任何未定义的东西做isset()和empty(),PHP永远不会抱怨。但是,如果你调用一个未定义的函数,PHP会抱怨。这是问题所在。
答案 0 :(得分:3)
首先,这不是错误,而是通知,因此您可以禁用它。
其次,您可以将此参数定义为通过引用传递以避免通知。
error_reporting(E_ALL);
function x(&$a) {
var_dump('inside', $a);
return empty($a) ? "null" : "'$a'";
}
$a = 4;
var_dump('before', isset($a), isset($c));
$b = x($a);
$d = x($c);
var_dump('after', isset($a), isset($c));
var_dump($b, $d);
输出:
string(6) "before" bool(true) bool(false)
string(6) "inside" int(4)
string(6) "inside" NULL
string(5) "after" bool(true) bool(false)
string(3) "'4'" string(4) "null"
答案 1 :(得分:1)
你也可以这样做:
$a = 5;
$b = "hi";
function var_test($var) {
global ${$var};
return isset(${$var}) ? ${$var} : null;
}
var_dump(var_test("a"));
var_dump(var_test("b"));
var_dump(var_test("c"));
原因${"var_name"}
将解析为$var_name
答案 2 :(得分:-1)
正如http://www.php.net/manual/en/functions.arguments.php所写,您可以这样做:
function x($a=NULL) {
return empty($a) ? "null" : "'$a'"
}