使用可能未定义的变量调用函数

时间:2013-07-17 11:00:27

标签: php

如果我有以下声明:

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

3 个答案:

答案 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'"
}