動的変数と静的変数の概念
phpにおける動的変数と静的変数の概念は、C言語についての知恵袋の回答の
値を格納する領域を動的変数では動的に確保し、静的変数では静的に確保する…のですが、これでは何のことかさっぱり判りませんね。
静的変数はプログラム実行開始時にメモリのどこかに変数の領域を確保し、そのプログラムが終了するまでその領域を使い続けます。
例えば、関数hogeの中で静的変数sを定義したとします。そして関数hogeを呼び出して、静的変数sに何かしらの値を代入し、そこからリターンしても静的変数sの領域は確保されたままです。
このため、次に関数hogeを呼び出したときに静的変数sが保持している値は前回関数hogeからリターンしたときの静的変数sの値をそのまま保持しています。そしてプログラムが終了すると、静的変数sの領域は破棄されます。
なお、この静的変数sの値を関数hoge以外からも参照できるというわけではありませんので、誤解なきよう(ポインターを使って間接的に参照するのであれば別ですが)。
動的変数は関数が呼び出されたときにメモリ上のどこかに領域が確保され、関数からリターンするとその領域は破棄されます。やはり関数hogeの中で動的変数dを定義したとします。この動的変数dの領域は関数hogeが呼び出されるまではメモリ上のどこにも存在しません。
関数hogeが呼び出されると動的変数dの領域が確保され、何かしらの値を代入できるようになります。そして関数hogeからリターンすると、この動的変数dの領域は破棄されます。
このため、関数hogeが呼び出されるたびに動的変数dはメモリ上の違う領域(同じ領域である可能性もありますが、同じ領域が使われる保証はありません)が使用されます。
以上の事が関数の動作にどのように関わってくるかですが、関数が内部情報を保持せず、また同時に複数の場所から呼び出されないなら、静的変数でも動的変数でも同じです。
しかし、関数が内部情報を保持するためには静的変数を使用しなければなりません。例えば、ある関数が何回呼び出されたかを数えて、10回呼び出されるごとに特別な処理を行いたいとします。
この場合、呼び出された回数は静的変数に保持しなければなりません。動的変数だと関数からリターンするたびに変数の値は破棄されてしまいますから。
と同じようなものなのでしょうか。