【问题标题】:php return global variablephp返回全局变量
【发布时间】:2012-08-31 17:26:34
【问题描述】:

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

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

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

【问题讨论】:

  • 好吧,它是在全局范围内声明的,还是在另一个方法或函数中显示的摘录? (那是 local 范围。)
  • 会不会是因为在第一个匿名函数中,$variable 实际上超出了范围?我认为,您需要将其作为参数传递。但这看起来确实是一段非常复杂的代码——肯定有更简单的方法吗?
  • 您实际上并没有执行这些功能。 $variable 将是一个函数,而不是一个变量。
  • 我不确定我的变量是否真的是全局变量,因为我的代码在另一个代码中,我看不出它是否只是包含在内,或者调用类似函数等等......所以可能是它不起作用的点,但有没有办法访问一级 globalER 变量? ...我也试过print_r($variable()),只是忘了给我的帖子写括号

标签: php global-variables


【解决方案1】:

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

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

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

【讨论】:

  • 闭包的语法是在函数原型中添加`use($value)`:function() use ($value) {
【解决方案2】:

$variable 发送到匿名函数中:

function($variable) {}

【讨论】:

  • 但是当我想获取变量的值时,我必须将其传递给自己,print_r($variable($variable)) ...当然我可以为isset 条件创建不同的变量,并为存储创建不同的变量匿名函数的返回值,但这不是那么优雅
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 1970-01-01
    • 2021-11-07
    • 2020-09-11
    • 2016-05-13
    • 2014-01-16
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多