2

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

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

// 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);
4

3 回答 3

2

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

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

$variable = isset($variable) ? $variable : function(){...}
于 2012-08-31T17:45:59.273 回答
1

发送$variable到匿名函数:

function($variable) {}
于 2012-08-31T17:38:49.417 回答
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());
于 2016-05-23T07:02:52.857 回答