クラスの中で、const
キーワードで定数を定義できる。
- クラス内でアクセスする場合は
self::
でアクセス - クラス外でアクセスする場合は
クラス名::
でアクセス(変数::
でも可能)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php class MyClass { const MY_CONSTANT = 'my constant value'; public function show() { echo self::MY_CONSTANT . "\n"; } } $obj = new MyClass(); echo MyClass::MY_CONSTANT . "\n"; echo $obj::MY_CONSTANT . "\n"; echo $obj->show(); // my constant value // my constant value // my constant value |
self::
、クラス名::
などをつけないと、警告が出たうえで定数名自体が文字列として解釈される。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class MyClass { const MY_CONSTANT = 'my constant value'; public function show() { MY_CONSTANT . "\n"; } } $obj = new MyClass(); echo MY_CONSTANT . "\n"; echo $obj->show(); // PHP Warning: Use of undefined constant MY_CONSTANT - assumed 'MY_CONSTANT' (this will throw an Error in a future version of PHP) // PHP Warning: Use of undefined constant MY_CONSTANT - assumed 'MY_CONSTANT' (this will throw an Error in a future version of PHP) |
定数なので値を再代入することはできない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php class MyClass { const CONSTANT = 'constatnt value'; public function show() { // self::CONSTANT = 'another constant valuse'; // エラー:PHP Parse error: syntax error, unexpected '=' } } $obj = new MyClass(); $obj->show(); // MyClass::CONSTANT = 'another constant value'; // エラー:PHP Parse error: syntax error, unexpected '=' |
const
定義の右辺に定義済みの定数、算術式を使うことができる。しかし関数は使用できない。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php class MyClass { const CONST1 = 2; const CONST2 = 3; const CONST3 = self::CONST1 + self::CONST2; // const CONST4 = sqrt(CONST1); // 関数は使えない:Constant expression contains invalid operations } echo MyClass::CONST3 . "\n"; // 5 |
定数定義の際にアクセス修飾子を使えて、アクセス制限ができる。省略した場合はpublic
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php class MyClass { public const PUBLIC_CONST = 'public constant'; private const PRIVATE_CONST = 'private constant'; public function show() { echo self::PUBLIC_CONST . "\n"; echo self::PRIVATE_CONST . "\n"; } } $obj = new MyClass(); $obj->show(); echo MyClass::PUBLIC_CONST . "\n"; // echo MyClass::PRIVATE_CONST . "\n"; // エラー:PHP Fatal error: Uncaught Error: Cannot access private const MyClass::PRIVATE_CONST // public constant // private constant // public constant // PHP Fatal error: Uncaught Error: Cannot access private const MyClass::PRIVATE_CONST in ... |