2011-02-20 11 views
23

私は、関数の外側で設定された変数をどのように使用できるかを調べようとしています。これを行う方法はありますか?変数を "グローバル"に設定しようとしましたが、期待どおりに機能しないようです。PHPの関数内で変数を外部から取得する

私のコードの簡単な例

$var = '1'; 

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

私はあなたがあなたの関数の内部でグローバルキーワードを使用する必要があります。2.

+1

は、私は' $のVAR =関数($のVAR){リターンの$ VAR + 1を行うことをお勧めします2.'の値を返します。 } '。そうすれば、デザインスキーマの悪いグローバル変数の使用を避けることができます。 –

答えて

43

の値を返すために、これが欲しいです。 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? 
} 
+1

'$ var = '1'; function(){ グローバル$ var; $ var + 1; return $ var; } ' –

+0

バー、あまりにも簡単です!とにかく、すばやい返信をありがとう!歓声メイト! – Henrikz

+2

は絶対に必要以上にグローバルを使用することはお勧めしません –

-1
<?php 
$var = '1'; 
function x ($var) { 
return $var + 1; 
} 
echo x($var); //2 
?> 
+1

値の保存に失敗しました。 –

5
$var = 1; 

function() { 
    global $var; 

    $var += 1; 
    return $var; 
} 

OR

$var = 1; 

function() { 
    $GLOBALS['var'] += 1; 
    return $GLOBALS['var']; 
} 
結果を格納
3

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

$var = '1'; 

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

この行あなたの関数で: $var + 1 あなたがグローバルなキーワードを使用している場合でも、$varに割り当てられた値を変更しません。

これらのどちらかが動作しますが、しかし: $var = $var + 1; または $var += 1;

+0

あなたは質問に答えていないので、これはコメントとしてもっと意味があると思います。それにもかかわらず、正しいです。 – devios1

9

グローバルは、トリックを行うが、離れてから滞在する一般的に優れているだろう。大規模なプログラムでは、プログラム全体でどこでも変更が可能であるため、動作を確認することはできません。また、グローバルを使用するテストコードは非常に難しくなります。

代わりに、クラスを使用することができます。私はこれが欲しい `から

class Counter { 
    private $var = 1; 

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

$counter = new Counter(); 
$newvalue = $counter->increment(); 
+0

+1はグローバル状態よりはるかに優れた解決策ですが、誰かが現在の値を増分せずに欲しい場合には$ varのゲッターが必要な場合もあります – GordonM

1
$var = '1'; 
function addOne() use($var) { 
    return $var + 1; 
} 
関連する問題