1

ここでPHPを使用して、マニュアルを章ごとに読み、新しいことを学ぶことにしました。だから今、私は静的変数を発見しました。これは素晴らしい概念のように見えますが、私がそれを理解する方法は次のとおりです。

静的変数は、スクリプトのロードごとに1回だけ設定されます。それらは変更およびインクリメントできますが、実際にはリセットできません。通常、関数で値を設定するために使用され、関数が実行されるたびにその変数を初期化する必要はありません。

<?php

function count2( $inputNum ) {
    static $a = $inputNum;
    echo $a++; //Echo and then increment.
}

for ( $i = 0; $i < 10; $i++ ) {
    count2(50);
}

?>

$aこれにより、静的変数が50から始まり、11倍に増加すると思います。どうしてエラーが発生するのですか?

4

3 に答える 3

4

他のPHP静的変数と同様に、静的プロパティはリテラルまたは定数を使用してのみ初期化できます。式は許可されていません。したがって、静的プロパティを整数または配列(たとえば)に初期化することはできますが、別の変数、関数の戻り値、またはオブジェクトに初期化することはできません。

私はあなたがドキュメントからその部分を逃したと思います(私のものを強調してください):)

于 2012-05-31T01:23:32.700 に答える
1

静的変数は、実行時まで値がわからない別の変数で初期化することはできません。コンパイル時に既知の値で初期化する必要があります。

function count2($inputNum) {
  // Initialize only once to an integer (non variable, non-expression)
  static $a = 0;
  if ($a === 0) {
    // If $a is still 0, set it to $inputNum
    $a = $inputNum;
  }
  echo $a++;
}

// First run outputs 25
count2(25);
// 25
// Subsequent runs increment
count2(25);
// 26
count2(25);
// 27

関連ドキュメント...

于 2012-05-31T01:24:20.623 に答える
0

すぐに問題が発生することはほとんどありません。

  • 静的変数を宣言できるのは1回だけです。count2()あなたの構文は、 10回呼び出すことによって何度もそれを覆い隠します。
  • ++静的変数を変更できないため、演算子を使用できません
  • 定義とを使用しないconstant

おそらく次のようなものを試してください:

<?php
error_reporting(E_ALL);

/* setup */

function set( $input ) {
    define( 'A', $input );
}
function tick() {
    echo constant( 'A' ) . "\n";
}

/* run */

set( 50 );
for($i=0; $i<10; $i++){
    tick();
}

?>

これは出力します:

$ php test.php 
50
50
50
50
50
50
50
50
50
50
于 2012-05-31T01:25:01.690 に答える