PHPの定数と変数をどう使い分けるのか、使いドコロがイマイチ分からないという方も多いのではないでしょうか。
定数は途中で書き換えができないなど、変数とは違うルールがあります。
変数だと途中で値を上書きしてしまい、上手くプログラムが動かなくなることもあるため、ハマってしまうことも…。
そんな時は定数を上手く使うと良いですね。
定数の使い方
define関数を使う
定数は途中で書き換えができないため、ユーザーIDやサイトURL、画像を格納するディレクトリなどプログラムの設定情報を格納する際によく使われます。
大文字、小文字どちらでも使えますが、一般的に大文字で定義されることが多いです。
クオーテーションで囲っていない大文字のアルファベットが出てきたら、「定数やな」と判断できますね。
define(‘定数の名前’, ‘格納する値’);
サンプル
1 2 3 4 5 |
// 定数を定義する define('USER_ID', 'tanaka0123@example.com'); // 定義した定数を出力する echo USER_ID; |
以下のように表示される
tanaka0123@example.com
定数は上書きできない
1 2 3 4 5 6 7 8 |
// 定数を定義する define('USER_ID', 'tanaka0123@example.com'); // 同じ定数名で再定義する define('USER_ID', 'watanabe777@example.com'); // 定義した定数を出力するが上書きされない echo USER_ID; |
上書きされない
tanaka0123@example.com
定数のルール
定数にも変数同様、以下のようなルールがあります。
使える文字
- 英数字
- 記号はアンダースコアのみ
- 日本語もOK
(一般的には使いません)
ルール
- 先頭に数字は使えない
- 大文字と小文字は区別される
- 記号はアンダースコアのみ
- 定数のスコープはグローバルなので、どこでも使える
- 定義済みの定数は上書きできない
良い例、悪い例
- USER_ID → ○
- userId → ○
- USER01 → ○
- ユーザー → ○
- 01USER → ×(先頭が数字)
- USER-ID → ×(ハイフンは使えない)
- USER ID → ×(スペースが入っている)
- __USER__ → △(有効だが将来的に定義される可能性があるため避けた方がよい)
定義済みの定数
デフォルトで定義されている定数もあります。
同じ定数を使わないように気をつけましょう。
よく使われる定義済み定数
名前 | 説明 |
---|---|
__LINE__ | ファイル上の現在の行番号 |
__FILE__ | ファイル上のフルパスとファイル名 |
__DIR__ | そのファイルが存在するディレクトリ |
TRUE | 真の値 |
FALSE | 偽の値 |
NULL | 値が空 |
定義済み定数の出力
デフォルトで定義されている定数や、新たに定義した定数の一覧を出力できます。
1 |
print_r(get_defined_constants()); |
[E_ERROR] => 1
…中略…
[TRUE] => 1
[FALSE] =>
[NULL] =>
…中略…
[USER_ID] => tanaka0123@example.com
定義済みの定数が並び、その下に続けて独自の定数が続きます。
定数の値も見れるので便利ですが、かなりズラズラ〜っと出てきます。
しかも改行していないので見にくいです。
ブラウザの「ソースの表示」機能でソースを見れば、改行されて綺麗に見れますね。
他のメンバーがどんな定数を定義しているか、デフォルトの定数のチェックなど様々な用途で使えるでしょう。
config.phpで定数を管理しよう
定数をプログラムの中にちりばめて使うこともできますが、定数の値を変更する際のメンテナンス性が悪くなります。
定数だけのファイル(config.php
など)を作成し、必要に応じて別ファイルから読み込むようにすると、メンテナンス性もアップするでしょう。
別ファイルでの管理
◇config.php
設定情報等のファイル
1 2 |
define('USER_ID', 'tanaka0123@example.com'); define('SITE_URL', 'http://www.flatflag.nir87.com'); |
◇index.php
require_once
などで読み込んで使う
1 2 3 4 5 6 |
// 外部ファイルを読み込む require_once('config.php'); // 外部ファイルで定義した定数を出力 echo 'ID:'.USER_ID; echo 'URL:'.SITE_URL; |
定数を上手く使い、プログラミングの効率を上げていきましょう。