somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【php】クラス外でのconst

5.3からクラス内でなく、外でもオブジェクト定数constを定義できるようになっていたみたいです。クラス外の定数定義defineと同じ名前をつけるとどうなるのか試してみました。

結果

まずは、defineしてからconstした場合です。C:\に、script.phpという名前で作成し、CLIで実行しました。

<php
define('TEST', 'define');
const TEST = 'const';

class test {
  const TEST = 'test::const';
}

echo TEST       ."\r\n";
echo test::TEST ."\r\n";
Notice: Constant TEST already defined in C:\script.php on line 2

Call Stack:
    0.0083     322984   1. {main}() C:\script.php:0

define
test::const
PHP Notice:  Constant TEST already defined in C:\script.php on line 2
PHP Stack trace:
PHP   1. {main}() C:\script.php:0

次は、constしてからdefineした場合です。定義の二行を入れ替えただけなので省略します。

Notice: Constant TEST already defined in C:\script.php on line 3

Call Stack:
    0.0082     322984   1. {main}() C:\script.php:0
    0.0082     323128   2. define(???, ???) C:\script.php:3

const
test::const
PHP Notice:  Constant TEST already defined in C:\script.php on line 3
PHP Stack trace:
PHP   1. {main}() C:\script.php:0
PHP   2. define(*uninitialized*, *uninitialized*) C:\script.php:3

クラス外でもconstが有効でした。defineで定義した定数とはバッティングするようです。クラス外でもif文の中でconstできないので、使うことはなさそうです。