定数について
そふぃのPHP入門 >> PHP言語リファレンス >> PHPの定数 >> 定数について

定数について

定数の定義には

  • define("定数名","定数の値")

定数とは

定数とは変更しない、定まった値を定義しておく為のものです。なんだか分かりにくいと思いますが定数は1回値を定義するとその値の再定義や消去ができないのです。ゆえに変更したくない値、又は変更してはいけない値を保持しておきます。

これに対して計算や再定義などによって一度定義した値でも値が変わっていくものを変数といいますが、詳しくは変数の項目で説明します。定数は定まった値、変数は変わっていく値、ですかね。

定数の定義方法

PHPで定数の定義ができるのはdefine()関数のみです。ただの代入などによっては定義できません。define()関数は

define("定数名","定数の値")

として使います。変数のように$記号は必要ありません。なお、定数名には慣習的に大文字をつけるようですが、小文字の定数名をつけてもちゃんと動作します。

定数の定義方法サンプル

  1. <?php
  2. define("MESSEGE","こんにちは!!");
  3. echo MESSEGE;
  4. ?>

出力結果

こんにちは!!

定義した定数の値が出力されたと思います。

定数の再定義

さて、定数は再定義できないという話ですが、あえて再定義してみるとどうなるでしょう。

PHPエラー構文

  1. <?php
  2. // 最初の定数定義define("APPLE","りんご");
  3. define("APPLE","りんご");
  4.  
  5. // 「りんご」を「林檎」に定義し直してみるdefine("APPLE","林檎");
  6. define("APPLE","林檎");
  7.  
  8. echo APPLE;
  9. ?>

出力結果

りんご

定数を再定義したにも関わらず、最初に定義した定数が出力される。

このように定数は再定義ができないので、常に最初に定義された値のみを保持します。このサンプルはNoticeエラーを出力します。エラー文はこんな感じです。

Notice: Constant APPLE already defined in (ファイルパスとエラー行数)

「APPLE」はすでに定義されています、と怒ってくるわけです。Noticeエラーは標準では出力されないため上記の出力結果のようにこの文章は出力されませんが、PHPの内部ではNoticeエラーが出ているので注意して下さい。尚、Noticeエラー文をわざと出力させるにはerror_reporting()関数をご覧下さい。

定数は消去する事もできません。1回定義した定数はどうやっても未定義の状態に戻す事ができないのです。

定数名の決まり

定数名につけれる名前にはある決まりがあります。

  1. アルファベット・数字・_と0x7F~0xFFまでのコードを持つ文字が使用できる。
  2. 最初の文字が数字であってはいけない。
  3. 大文字・小文字を区別する(デフォルトの設定で。変更する事も可能。)

変数名のルールと同じなのですが、定数名には数字と文字が使えるけど、_(アンダーバー)以外の記号はだめ!!いくら数字を使ってよくても数字で始めちゃだめ!!ってなかんじです。さて、0x7F~0xFFの文字コードという訳の分からない表記についてですが、ここで文字コードの話をすると長くなるので深く考えずに「ひらがなや漢字も使える」と覚えておいて下さい(笑)ちなみに使用可能な文字を正規表現で表すと、[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*となります。

大文字・小文字の区別

定数名の大文字・小文字の区別は

通常だと定数名は大文字・小文字を区別します。例えば、「ORANGE」と「orange」はまったく別の定数として扱われます。この2つを同じ定数として扱いたい場合、define()関数の第3引数に「TRUE」もしくは「1」を指定します。

define()関数は第1引数に定数名、第2引数に定数値を指定すると説明したと思うのですが、第1・第2引数は必ず指定しなければいけない値です。この他に第3引数を任意で指定する事も可能です。

define()関数の第3引数は「大文字・小文字を区別するかどうかのオプション」で省略する事も可能です。省略した場合のデフォルト値はFALSEつまり「大文字・小文字を区別する」になります。

大文字・小文字を区別させたくない場合

第3引数をtrue(もしくは1)に指定します。

  1. <?php
  2. define("ORANGE", "オレンジ", 1); // 第3引数に1を指定。
  3. echo orange;
  4. ?>

出力結果

オレンジ

第3引数を 1 に指定したので、定数名の大文字・小文字を区別しなくなっています。

通常の方法(大文字・小文字を区別する)

対して、通常の指定方法で定数を定義してみます。

PHPエラー構文

  1. <?php
  2. // 定数名は大文字。出力時には小文字。
  3. define("MELON","メロン");
  4. echo melon;
  5. ?>

出力結果

melon

定義した定数ではなく、「melon」がそのまま出力されます。このサンプルはNoticeエラーを出力します。以下エラー文です。

Notice: Use of undefined constant melon - assumed 'melon' in (ファイルパスとエラー行数)

PHP君が何を怒っておいでかというと、「未定義の定数'melon'が出力された」と怒ってくるわけです。

定数の有効範囲と型

定数のスコープ(有効範囲)はグローバルです。よーするにスコープは存在せず、スクリプト中のどこでも定数にアクセスできます。変数のようなややこしいスコープがなく、どこに書いてもいいと覚えてもらって構いません。

定数と変数は異なる名前空間を使用するので、TRUEと$TRUEは違うものを意味します。

定数の中にはスカラー型の値のみ(文字列型、整数型、浮動少数型、論理型)含む事ができます。型について詳しくは型についてを参照して下さい。