PHPを書いていて、constとdefine()がどうやら等価には扱えないらしい、ということに気づきました。
この二つにはどんな違いがあるのか?気になったので調べてみました。
実行環境はPHP 7.1.23、導入、計算、配列の3項目については https://www.php.net/manual/ja/language.constants.syntax.php と https://www.php.net/manual/ja/function.define.php で調べた結果を載せています。
const vs define() matrix
const or define() | 導入 | 計算 | 配列 | クラス外 | 呼び出し方 | クラス直下 | 呼び出し方 | 関数内 | 呼び出し方 |
---|---|---|---|---|---|---|---|---|---|
const | 5.3.0以降 | 5.6以降 | 5.6以降 | 書ける | NAME | 書ける | self::NAME | 書けない | / |
define() | 4以降 | 4以降 | 7以降 | 書ける | NAME | 書けない | / | 書ける | NAME |
当然ながら、クラス直下、関数内で定義した場合はスコープ外からは呼べません。
constで定義した場合スコープ外から呼べませんが、define()はスコープ外からも呼べるようです。
まとめ
PHP7以降でしたら、どこでも呼び出せる定数を定義したいのならばクラス外で定義すればよく、constとdefineに大きな差は無いようです。
一方でクラス内定数を作りたいのならばconst 、関数内定数を作りたいのならばdefineという使い分けが必要そうです のみが選択肢になりそうです。また、constでクラス内定数を定義した場合、単純なNAME
だけでは呼び出せないことに注意が必要です。
そうした違いがあるのにPHP7以前では両者に性能面での差もあり、きっとカオスだった気がします。
なお、ツッコミ大歓迎ですので、どうかよろしくお願いします。