php返回全局变量

时间:2012-08-31 17:26:35

标签: php global-variables

我有变量可以设置并包含一些字符串,如果不是我需要以另一种方式找到这个字符串。我决定使用带有匿名函数的三元运算符,当设置变量值时使用第一个函数,不使用第二个函数。

问题是,第一个函数没有返回任何值,为什么不呢?

// This line is just for testing purposes so the first anonymous function is run
$variable = "value test";

$variable = isset($variable) ?
function() { global $variable; return $variable; } :
function() {
  $tmp = JFactory::GetDocument()->base;
  $tmp = explode('/', JFactory::GetDocument()->base);
  $tmp = explode('-', $tmp[count($tmp)-1]);
  unset($tmp[0]);

  return implode(' ', $tmp);  
};

print_r($variable);

3 个答案:

答案 0 :(得分:2)

该函数可能不返回任何内容,因为$variable不是全局的,它存在于调用者的范围内。您需要将其作为参数传递,或者在调用者中将其声明为全局。

但为什么要使用两个匿名函数?你不能用:

$variable = isset($variable) ? $variable : function(){...}

答案 1 :(得分:1)

$variable发送到匿名函数:

function($variable) {}

答案 2 :(得分:1)

这里的问题是我覆盖了变量。我尝试返回variable的值,但将函数分配给同一个variable,因此实际值丢失了。因此,解决这个问题的一种方法是重命名变量,或者将值传递给匿名函数。

//
// Rename variable
//
$variable1 = "value test";

$variable = isset($variable) ?
function() { GLOBAL $variable1; return $variable1; } :
function() { return false; };

var_dump($variable());


//
// Pass variable to anonymous function
//
$variable = "value test";

$variable = isset($variable) ?
function() use($variable) { return $variable; } :
function() {
    // ...
    return false;
};

var_dump($variable());