PHP でグローバルな定数を定義するには、define()
関数を使用します。
define()
で定数を定義するときは、定数名をクォーテーションマークで囲む必要があります。
第三引数で true
を指定すると、定数の名前は大文字・小文字を区別しないようになります。
define('MAX_NUM', 100);
define('DB_PATH', 'sample.db');
echo MAX_NUM; // 100
echo DB_PATH; // 'sample.db'
ある名前の定数が定義されているかどうかを知らべるには defined()
を使用します。
define('MAX_NUM', 100);
if (defined('MAX_NUM')) {
print 'MAX_NUM = ' . MAX_NUM . "\n";
} else {
print "Not defined\n";
}
クラス定数は const
キーワードを使って定義することができます(PHP5.3 以降)。
正確には、const
はクラス定数専用というわけではないのですが、名前空間の影響を受けるため、主にクラス定数の定義などに使用します。
const
で定義したクラス定数にアクセス修飾子は付けることができず、必ず public になります。
class MyClass {
const MY_CONST = 100;
...
}
クラス定数を参照する場合は、以下のようにします。
self::定数名
クラス名::定数名
メンバメソッドからアクセスするときも、いちいち self::
を付けないといけないのがちょっと面倒ですね。
<?php
class Config {
const CONST_INT = 100;
const CONST_STR = 'ABC';
public function dump() {
// クラス定数をメソッド内から参照する
echo self::CONST_INT . "\n";
echo self::CONST_STR . "\n";
}
}
// クラス定数を外部から参照する
echo Config::CONST_INT . "\n";
echo Config::CONST_STR . "\n";
$conf = new Config();
$conf->dump();
$ php sample.php
100
ABC
100
ABC
定数名を表す文字列を用いて、その定数の値を参照するには constant()
関数を使用します。
const
キーワードで定義した定数に対してもアクセスできます。
<?php
define('MAX_NUM', 10);
$name = 'MAX_NUM';
echo constant($name), PHP_EOL;
通常の変数に対して同様に文字列でアクセスする場合は、可変変数の仕組みを使って $$varname
のように簡単に参照することができます。
定数の場合はもともとの参照方法が $
を付けない構文になっているので、constant()
関数を用意せざるを得なかったのでしょう。