PHP の変数は、ドル記号とそれに続く変数名で表されます。変数名では大文字と小文字が区別されます。
変数名は、PHP の他のタグと同じルールに従います。有効な変数名は文字またはアンダースコアで始まり、その後に任意の数の文字、数字、またはアンダースコアが続きます。通常の正規表現では「[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*」と表現されます。
注: ここで説明されている文字は、127 から 255 (0x7f-0xff) までの a ~ z、A ~ Z、および ASCII 文字です。
注: $this は特別な変数であり、値を割り当てることはできません。
$var = 'ボブ';
$Var = 'ジョー';
echo "$var, $Var" // 出力「ボブ、ジョー」
$4site = 'まだ'; // 不正な変数名; 数字で始まります
$_4site = 'まだ'; // 正当な変数名; アンダースコアで始まります
$isite is = 'mansikka';中国語を使用できます
?>
デフォルトでは、変数は常に値によって割り当てられます。つまり、式の値が変数に代入される場合、元の式全体の値がターゲット変数に代入されます。これは、たとえば、ある変数の値が別の変数に割り当てられているときにその変数の値を変更しても、他の変数には影響を与えないことを意味します。
PHP は、変数に値を代入する別の方法、参照代入も提供します。これは、新しい変数が単に元の変数を参照する (つまり、「エイリアス」または「ポイントする」) ことを意味します。新しい変数を変更すると元の変数に影響し、その逆も同様です。
参照代入を使用するには、代入する変数 (ソース変数) の前に & 記号を追加するだけです。たとえば、次のコード スニペットは、「My name is Bob」を 2 回出力します。
<?php $foo = 'Bob'; // 将 'Bob' 赋给 $foo $bar = &$foo; // 通过 $bar 引用 $foo $bar = "My name is $bar"; // 修改 $bar 变量 echo $bar; echo $foo; // $foo 的值也被修改 ?>
注意すべき重要な点の 1 つは、参照によって割り当てられるのは名前付き変数のみであるということです。
<?php $foo = 25; $bar = &$foo; // 合法的赋值 $bar = &(24 * 7); // 非法; 引用没有名字的表达式 function test() { return 25; } $bar = &test(); // 非法 ?>
PHP では変数を初期化する必要はありませんが、変数を初期化することは良い習慣です。初期化されていない変数にはその型のデフォルト値があります。ブール変数のデフォルト値は FALSE、整数および浮動小数点変数のデフォルト値は 0、文字列変数 (エコーで使用されるものなど) のデフォルト値は空の文字列です。配列 変数のデフォルト値は空の配列です。
例 #1 初期化されていない変数のデフォルト値
<?php // Unset AND unreferenced (no use context) variable; outputs NULL var_dump($unset_var); // Boolean usage; outputs 'false' (See ternary operators for more on this syntax) echo($unset_bool ? "true\n" : "false\n"); // String usage; outputs 'string(3) "abc"' $unset_str .= 'abc'; var_dump($unset_str); // Integer usage; outputs 'int(25)' $unset_int += 25; // 0 + 25 => 25 var_dump($unset_int); // Float/double usage; outputs 'float(1.25)' $unset_float += 1.25; var_dump($unset_float); // Array usage; outputs array(1) { [3]=> string(3) "def" } $unset_arr[3] = "def"; // array() + array(3 => "def") => array(3 => "def") var_dump($unset_arr); // Object usage; creates new stdClass object (see http://www.php.net/manual/en/reserved.classes.php) // Outputs: object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" } $unset_obj->foo = 'bar'; var_dump($unset_obj); ?>
初期化されていない変数のデフォルト値に依存すると、あるファイルを同じ変数名を持つ別のファイルにインクルードする場合など、特定の状況では問題が発生する可能性があります。また、 register_globals をオンにすることは、重大なセキュリティ リスクになります。初期化されていない変数を使用すると E_NOTICE エラーが発生しますが、初期化されていない配列に要素を追加しても E_NOTICE エラーは発生しません。 isset() 言語構造を使用すると、変数が初期化されているかどうかを検出できます。