未定義の変数から読み込むとNULLが返されます。読み込む前にその状態を知るには、isset()を呼びます。またエラーレベルにE_NOTICEを追加することで、定義されていない変数の読み込み時にNotice: Undefined variableの警告を発生させることができます。
$a; echo $a; // Notice: Undefined variable: a $b = $a; // Notice: Undefined variable: a echo is_null( $b ); // 1 $a = 'A'; echo $a; // A
define()関数によって定義します。ちなみにC言語の#defineはキーワードですが、PHPでは関数です。
bool define ( string $name , mixed $value [, bool $case_insensitive = FALSE ] )PHP: define - Manual
たとえば、定数AAAに123という値を定義するには、
define( 'AAA', 123 );
とします。
定数を再定義するとエラーとなります。
define( 'AAA', 10 );
define( 'AAA', 20 ); // ERROR : Notice: Constant AAA already defined
未定義の定数を使用すると、その定数の名前の文字列として処理されます。
define( 'AAA', 123 ); echo AAA; // 123と出力 echo BBB; // BBBと出力
このような挙動が好ましくない状況では、定数を使用する前に、それが定義されているかを確認します。それはdefined()で行えます。
bool defined ( string $name )PHP: defined - Manual
引数$nameは文字列で指定することに注意が必要です。これを定数としては、確認対象の定数を定数で指定することになってしまいます。
define( 'AAA', 123 ); echo defined( AAA )? AAA : 'undefined'; // ERROR : defined(123)と解釈される echo defined( 'AAA' )? AAA : 'undefined'; // OK
クラス定数は、constキーワードによって定義します。PHP: オブジェクト定数 - Manual
class MyClass { const CONSTANT = 256; }
定数 | 説明 |
---|---|
PHP_VERSION | 現在のPHPのバージョン |
PHP_MAJOR_VERSION | 現在のPHPのメジャー バージョン |
... |
≫定義済み変数 ($_GET、$_POSTなど) ≫エラーレベル定数
変数を利用して変数を定義することで、動的に変数を使い分けられるようになります。PHP: 可変変数 - Manual
$a = 'value'; $$a = 256; // 変数valueが定義され数値が格納される echo $value; // 256と表示される
可変変数は配列に対して特に有効です。たとえば配列$_POSTの要素を可変変数で処理することで、配列のキーから変数を作成できます。
変数のスコープはブロック内に制限されません。
for( $i = 0; $i < 10; $i++ ) { $a = 1; } echo $i; // 10 と出力 echo $a; // 1 と出力
includeされるスクリプト内で定義されている変数は、includeした側でも有効です。また、その逆も有効です。
たとえばsample.phpで、
$a = 1;
と定義されていると、これをincludeした側では、
include 'sample.php';
echo $a; // 1 と出力
のように変数にアクセスできます。
関数の中で使用される変数は、スコープが関数内部となります。
$a = 1; // グローバルスコープ function Func() { echo $a; // ローカルスコープの変数の参照 }
関数内部からグローバル変数を参照するには、globalキーワードでグローバル宣言します。global キーワード - PHP: 変数のスコープ - Manual
$a = 1; // グローバルスコープ function Func() { global $a; echo $a; // グローバルスコープの変数の参照 }
staticキーワードで宣言することで、関数内で定義されるローカルスコープの変数に対して、初期化をコンパイル時にのみ行うように指示できます。静的変数の使用 - PHP: 変数のスコープ - Manual
function Func() { static $a = 0; }
変数が存在して、その値がNULL以外のときにTRUEが返されます。
bool isset ( mixed $var [, mixed $... ] )PHP: isset - Manual
なお配列内の要素の存在を確認するには、array_key_exists()を用います。
次のいずれかの場合に、TRUEが返されます。
bool empty ( mixed $var )PHP: empty - Manual
empty()は意味的に、
!isset( $var ) || $var == FALSE
と同義であり、このように書き換えられます。
isset()とempty()の判定には、下表のような違いがあります。
値 | 説明 | isset() | empty() |
---|---|---|---|
$var | 定義されていない変数 | FALSE | TRUE |
$var | 定義されているが、値が未設定の変数 | ||
NULL | ヌル | ||
TRUE | 論理値 | TRUE | FALSE |
256 | 整数 | ||
"abc" | 文字列 | ||
array(256) | 配列 | ||
FALSE | 論理値 | TRUE | |
0 | 整数の0 | ||
0.0 | 浮動小数点数の0 | ||
"0" | 文字列の0 | ||
"" | 空文字列 | ||
array() | 空の配列 |