ホームページ  >  記事  >  バックエンド開発  >  PHPの静的変数に関する質問

PHPの静的変数に関する質問

怪我咯
怪我咯オリジナル
2017-07-10 11:39:541282ブラウズ

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 つの重要な機能は静的変数です。静的変数はローカル

function

ドメインにのみ存在し、プログラムの実行がこのスコープを離れるときに一度だけ初期化され、その値は消えず、最後の実行の結果が使用されます。

次の例を見てください:

<?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 ずつ増分します。 静的変数は、
再帰関数

を処理する方法も提供します。再帰関数は、それ自体を呼び出すメソッドです。再帰関数を作成するときは、終了せずに無限に再帰する可能性があるため注意してください。必ず再帰を中止する方法を用意してください。次の単純な関数は、静的変数 $count を使用して再帰的に 10 までカウントし、いつ停止するかを決定します:

静的変数と再帰関数の例:

<?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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。