LoginSignup
1
1

More than 3 years have passed since last update.

[PHP] const vs define() matrix

Last updated at Posted at 2019-07-12

PHPを書いていて、constとdefine()がどうやら等価には扱えないらしい、ということに気づきました。
この二つにはどんな違いがあるのか?気になったので調べてみました。
実行環境はPHP 7.1.23、導入、計算、配列の3項目については https://www.php.net/manual/ja/language.constants.syntax.phphttps://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以前では両者に性能面での差もあり、きっとカオスだった気がします。

なお、ツッコミ大歓迎ですので、どうかよろしくお願いします。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1