php返回全局变量


php return global variable

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

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

// 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);
函数可能不返回任何内容,因为$variable不是全局的,它位于调用方的作用域中。您需要将其作为参数传递,或者在调用方中也声明为全局。

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

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

$variable发送到匿名函数:

function($variable) {}

这里的问题是我覆盖了变量。我试图返回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());