4

如果我有以下陈述:

$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 会抱怨。这是这里的问题。

4

3 回答 3

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"
于 2013-07-17T11:07:36.507 回答
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

于 2013-07-17T11:59:55.557 回答
-1

正如这里写的http://www.php.net/manual/en/functions.arguments.php你可以做这样的事情:

function x($a=NULL) {
   return empty($a) ? "null" : "'$a'"
}
于 2013-07-17T11:40:11.523 回答