2017-03-11 18 views
1

これはW3Schoolsで見ました。関数が呼び出されるたびに、変数xが再び0になるので関数内の静的変数

<?php 
    function myTest() { 
    static $x = 0; 
    echo $x; 
    $x++; 
    } 

myTest(); 
myTest(); 
myTest(); 
?> 

出力は0、1、2 それが0ではない、なぜかしら、0および0.1 あります。

私はPHPの初心者です。ありがとう!

+0

この関数を呼び出すたびに、$ xをゼロ(0)にリセットするためです。 – Rick

+0

ええ、なぜ出力が0,1,2? –

+2

'static'は、関数が最初に呼び出されたときにのみ宣言されます。後続の呼び出しごとに記憶されます。これは関数スコープで 'static'がどのように機能するかです。 PHPは基本的にC言語に根ざしていることを思い出させるものです – apokryfos

答えて

2

関数内でvar staticを宣言すると、varは複数の呼び出しで値を保持します。クラスの静的なvar内部と比較することができます。

投稿したコードは、実際の効果を確認するのに良い例です。しかし、私は静的な内部関数を注意深く使用しています。ほとんどの場合、静的な値が必要です。値をリセットするか、多くのロジックを必要とし、コードが本当に悪くなります。

良い例は、特定の識別子に固有の識別子を返す関数です。これは、このコードを使用することで簡単に達成できます。

function unique_id($id) { 
    static $count = 0; 
    return $id . ($id++); 
} 
0

この例では明確になる場合があります。 スタティックは、スコープを持ちます。したがって、グローバル変数ではありません。だから私は静的な$ xを関数の外に定義することができ、そこに定義されます。 staticにスコープがあるので、$ x = 0の実行とリセットを続けるのは意味をなさないでしょう。したがって、phpはその行が初めて呼び出されたときにだけそれを認識します。

<?php 
static $x = 1000; 

    function myTest() { 
     static $x = 0; 
     echo $x; 
     $x++; 
    } 

myTest(); 
myTest(); 
myTest(); 
?> 
関連する問題