web-dev-qa-db-ja.com

PHPの関数内で、外部から変数を取得する

関数の外側、内側で設定された変数をどのように使用できるかを理解しようとしています。これを行う方法はありますか?変数を「グローバル」に設定しようとしましたが、期待どおりに動作しないようです。

私のコードの簡単な例

$var = '1';

function() {
$var + 1;
return $var;
}

私はこれが欲しい、2の値を返します。

28
Henrikz

関数でglobalキーワードinsideを使用する必要があります。 http://php.net/manual/en/language.variables.scope.php

[〜#〜] edit [〜#〜](コメント者のおかげで、私はこれを見落としていました)

...そして結果をどこかに保存する

$var = '1';
function() {
    global $var;
    $var += 1;   //are you sure you want to both change the value of $var
    return $var; //and return the value?
}
54
Jesse Cohen

グローバルはトリックを行いますが、一般的には近寄らないでください。大規模なプログラムでは、プログラム全体のどこからでも変更できるため、そのような動作を確認することはできません。また、グローバルを使用するコードのテストは非常に困難になります。

別の方法は、クラスを使用することです。

class Counter {
    private $var = 1;

    public function increment() {
        $this->var++;
        return $this->var;
    }
}

$counter = new Counter();
$newvalue = $counter->increment();
10
Jacob
$var = 1;

function() {
  global $var;

  $var += 1;
  return $var;
}

OR

$var = 1;

function() {
  $GLOBALS['var'] += 1;
  return $GLOBALS['var'];
}
5
Czechnology
$var = '1';
function addOne() use($var) {
   return $var + 1;
}
3
Chamandeep

ドキュメントについては http://php.net/manual/en/language.variables.scope.php を参照してください。あなたの特定のケースでは、$var + 1オペレーションを何にも割り当てていないため、望む結果が得られなかったと思います。数学が実行され、その後、本質的に捨てられます。実際の例については、以下を参照してください。

$var = '1';

function addOne() {
   global $var;
   $var = $var + 1;
   return $var;
}
3
Nathan Anderson

関数の次の行:$var + 1は、globalキーワードを使用しても、$varに割り当てられた値を変更しません。

ただし、次のいずれかが機能します:$var = $var + 1;または$var += 1;

3
Brian Driscoll