変数名は、PHP の他のタグと同じルールに従います。有効な変数名は文字またはアンダースコアで始まり、その後に任意の数の文字、数字、またはアンダースコアが続きます。通常の正規表現では「[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*」と表現されます。
注: $this は値を割り当てることができない特殊な変数です。
変数はデフォルトで常に値によって割り当てられます。つまり、式の値が変数に代入される場合、元の式全体の値がターゲット変数に代入されます。これは、たとえば、ある変数の値が別の変数に割り当てられているときにその変数の値を変更しても、他の変数には影響を与えないことを意味します。このタイプの代入演算については、「式」の章を参照してください。
PHP では、変数に値を代入する別の方法である参照代入も提供しています。これは、新しい変数が単に元の変数を参照する (つまり、「エイリアス」または「ポイントする」) ことを意味します。新しい変数を変更すると元の変数に影響し、その逆も同様です。
参照による代入を使用するには、代入する変数 (ソース変数) の前に & 記号を追加するだけです。
重要な点が 1 つ指摘されなければなりません。それは、参照によって割り当てられるのは名前を持つ変数のみであるということです。
コードをコピー コードは次のとおりです。
$foo = 25; $bar = &$foo; // 正当な代入
$bar = &(24 * 7) // 名前のない式を参照します
function test()
{
return 25;
}
$bar = &test(); // 不正
?>
PHP では変数を初期化する必要はありません良い習慣です。初期化されていない変数には、その型のデフォルト値があります。ブール変数の場合は FALSE、整数および浮動小数点変数の場合は 0、文字列変数の場合は空の文字列、配列変数の場合は空の配列です。
初期化されていない変数のデフォルト値に依存すると、あるファイルを同じ変数名を持つ別のファイルにインクルードする場合など、特定の状況では問題が発生する可能性があります。また、 register_globals をオンにすることは、重大なセキュリティ リスクになります。初期化されていない変数を使用すると E_NOTICE エラーが発生しますが、初期化されていない配列に要素を追加しても E_NOTICE エラーは発生しません。 isset() 言語構造を使用すると、変数が初期化されているかどうかを検出できます。
定義済み変数
PHP には、多数の定義済み変数が用意されています。多くの変数は実行中のサーバーのバージョンや設定、その他の要因に依存するため、詳細なドキュメントは利用できません。一部の事前定義変数は、PHP をコマンド ラインから実行すると有効になりません。
PHP 4.1.0 以降、PHP は、Web サーバー (利用可能な場合)、ランタイム環境、およびユーザー入力からのデータを含む追加の事前定義された配列変数セットを提供します。これらの配列は、自動的にグローバルに、つまりどのスコープでも自動的に有効になるという点で非常に特殊です。したがって、それらはオートグローバルまたはスーパーグローバルと呼ばれることがよくあります。 (PHP にはユーザー定義のスーパーグローバル変数のメカニズムはありません。) スーパーグローバル変数は以下にリストされていますが、その内容と、PHP の事前定義変数とその性質の詳細については、「事前定義変数」を参照してください。さらに、古い事前定義配列 ($HTTP_*_VARS) がまだ存在していることにも気づくでしょう。 PHP 5.0.0 以降、long 型の PHP 定義済み変数配列は register_long_arrays 設定オプションを使用して無効にできます。
変数のスコープ
変数のスコープは、変数が定義されているコンテキスト スコープ (つまり、その有効スコープ) です。ほとんどの PHP 変数にはスコープが 1 つだけあります。この単一スコープ スパンには、include および require によって導入されたファイルも含まれます。
PHP のグローバル変数は C 言語とは少し異なります。C 言語では、ローカル変数によってオーバーライドされない限り、グローバル変数は関数内で自動的に有効になります。 PHP のローカル変数を使用した場合、グローバル変数は上書きされず、変数のデフォルトの初期値になります。これにより問題が発生する可能性があり、誰かが誤ってグローバル変数を変更してしまう可能性があります。 PHP のグローバル変数を関数で使用する場合は、グローバル変数を宣言する必要があります。
静的変数の使用
変数スコープのもう 1 つの重要な機能は、静的変数です。静的変数はローカル関数スコープ内にのみ存在しますが、プログラムの実行がこのスコープを離れても、その値は失われません。