2

設定して文字列を含む変数がありますが、そうでない場合は、この文字列を別の方法で見つける必要があります。無名関数で三項演算子を使用することにしました。変数の値が設定されている場合は最初の関数が使用され、そうでない場合は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関数はグローバルではなく、呼び出し元のスコープ内にあるため、おそらく何も返しません。パラメータとして渡すか、呼び出し元でもグローバルに宣言する必要があります。

しかし、なぜ2 つの無名関数を使用するのでしょうか。使用できませんでした:

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

Send the $variable into the anonymous function:

function($variable) {}
于 2012-08-31T17:38:49.417 に答える
1

ここでの問題は、変数を上書きしていたことです。の値を返そうとしましたvariableが、関数をまったく同じ に割り当てたvariableため、実際の値が失われました。したがって、これを修正する 1 つの方法は、変数の名前を変更するか、無名関数に値を渡すことです。

//
// 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 に答える