phpのメンバーvariablesは、宣言と同時に初期化できますが、スカラーでのみ初期化できます。
class A { public $f1 = 'xxxx'; static public $f2 = 100; }
変数をオブジェクトに割り当てたい場合、変数はコンストラクターでのみ初期化できます。例:
class A { private $child; public function construct() { $this->child = new B(); } }
しかし、phpにはstaticconstructはありません。 Java の
static
device/static ブロックと同様に、初期化する適切なタイミングがありません。
class A { static public $child; } A::$child = new B();プライベートメンバーに対するクリーンな方法はないようです。これを行うしかありません:
class A {
static private $child;
static public initialize() {
self::$child = new B();
}
}
A::initialize();
PHP の変数スコープのもう 1 つの重要な機能は静的変数です。静的変数はローカル
ドメインにのみ存在し、プログラムの実行がこのスコープを離れるときに一度だけ初期化され、その値は消えず、最後の実行の結果が使用されます。
次の例を見てください:
<?php function Test() { $w3sky = 0; echo $w3sky; $w3sky++; } ?>この関数は、$w3sky の値を 0 に設定し、呼び出されるたびに「0」を出力します。この関数が終了すると変数 $w3sky は存在しないため、変数 $w3sky++ を 1 つ増やしても効果はありません。このカウント値を失わないカウント関数を作成するには、変数 $w3sky を静的として定義します。
次のように:
<?php function Test() { static $w3sky = 0; echo $w3sky; $w3sky++; } ?>この関数は $w3sky の値を出力し、Test() が呼び出されるたびに 1 ずつ増分します。 静的変数は、
静的変数と再帰関数の例: <?PHP
function Test()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test();
}
$count--;
}
?>
注: 静的変数は、上の例のように宣言できます。宣言内の
expression
<?PHP function foo(){ static $int = 0;// correct static $int = 1+2; // wrong (as it is an expression) static $int = sqrt(121); // wrong (as it is an expression too) $int++; echo $int; } ?>
以上がPHPの静的変数に関する質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。