定数
PHP
定数 2015/01/27
定数は普通の変数とは違い代入文ではなく、定数定義専用の関数を使って定義する。グローバルのスコープを持つので、一度定義すればどこからでもその定数名だけで参照できる。
定数名は先頭に $
が付かない点を除いて普通の変数名と同じルールだが、慣例では定数はすべて大文字にする。
$
が先頭につかないので普通のグローバル変数と名前が衝突することはない。
// グローバル空間に定数を定義
// 配列を設定することはできない
define("FOO", 10);
// グローバル空間の定数を参照
FOO;
同じ名前で2回以上定義しようとすると Constant FOO already defined
というようなNoticeが発生し、
2回目以降の定義は無視される。
定数の定義で定数名を文字列で指定するのがちょっと気持ち悪い。
定数 | PHP Manual
http://php.net/manual/ja/language.constants.php
オブジェクト定数 2016/09/28
クラスの中にメンバーとして定数を定義することもでき、これは上述の定数とは違い、const
を付けた代入文で定義する。インスタンスではなくクラスに対して定義するもので、インスタンスごとに異なる値で定義することはできない。
この定数名も先頭に $
を付けず、慣例ではすべて大文字にする。
// クラスの中のメンバーとして定数を定義
// 右辺には関数呼び出しや演算子の含むもの、配列を置くことはできない
// 文字列の連結すらだめ
const BAR = 20;
// クラスの中の定数を参照
HogeClass::BAR;
PHP 5.3からの機能。
オブジェクト定数 | PHP Manual
http://php.net/manual/ja/language.oop5.constants.php
Ruby 2014/01/26
アルファベット大文字で始まる識別子が定数になる。これは慣例ではなくRubyの文法である。定数であってもなんと再代入が可能である。ただし再代入は普通は推奨されず、 2度目以降は実行時に警告が表示される。
PI = 3.14
モジュールの中で定義された定数はモジュール名と定数名を二重コロン ::
で接続してアクセスできる。
module Foo
PI = 3.14
end
print Foo::PI
Perl 2013/09/30
use const PI => 3.14;
JavaScript 2015/01/13
以下のように const
を使うと定数になって再代入ができなくなる。ただ、ブラウザによってこの構文のサポート状況はいろいろみたい。
const PI = 3.14;