传递未在PHP函数中设置的变量

时间:2014-09-15 13:52:50

标签: php isset

我从一些API获得了很多数组,我需要检查是否存在某个变量。

我有很多像这样的块:

if (isset($var))
    $varToSet = $var;
else
    $varToSet = '';

所以我决定为此做一个功能。我带来了:

function setVar($var)
{
    if (isset($var))
        return $var;
    return '';
}

但正如我所料,我得到错误Undefined variable,我发现我需要通过引用来传递参数,所以我会得到以下原型:

function setVar(&$var);

到目前为止它一直运作良好,这是我的问题的一个例子:

// works fine
$var = "test";
$varToSet = setVar($var);

// works fine
$var = "test";
$varToSet = setVar($doesNotExist);

// works fine
$var = "test";
$varToSet = setVar($doesNotExist['index']);

// doesn't work
$var = "test";
$varToSet = setVar($var['index']);

在上一个示例中,我得到Illegal string offset 'indexOnly variables can be passed by reference PHP错误。 我知道为什么我会遇到这些错误,我只是无法弄清楚如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

错误为您提供答案。你的变量是一个字符串。但是您尝试使用方括号[]来访问数组元素。

第二个是由无效的参考引起的。

这是通过引用传递的:

$variable = 'test'; 
myFunction($variable);

这是通过值传递的:

myFunction('test');

这是一个很大的不同!

您无法将字符串称为数组

$varToSet = setVar($var['index']);

您可以将该行更改为:

echo $var['index'];

你仍会有同样的错误/警告。 如果要验证是否设置了数组变量,请使用

isset($var['index'])

但它返回值,而不是参考

答案 1 :(得分:0)

我主要使用property_exists来检查json对象上是否存在值。

function getFromJson($json,$value) 
{
    if (property_exists(json, $value)) {
       return $json->$value;
     }
   return null;
}

function get($var,$value = null) 
{
    if (is_null($value)) {
       return $var;
    }
    if (is_object($var) && property_exists($var, $value)) {
       return $json->$value;
     }
    if (is_array($var)) {
       return $var[$value];
    }
   return $var;
}