PHP: 定数
August 26, 2020
PHP における定数について。定数名は慣習的に全て大文字+単語区切りはアンダースコア。
定数の定義 - define() #
define()
関数で定数定義ができる。許可されていない定数名も定義できるが、その場合は constant()
関数で取得する必要がある。
<?php
define("FOO", "bar");
echo FOO . "\n";
define("TAKO", array("ika", "uni", "maguro"));
echo TAKO[1] . "\n";
define("INVALID CONSTANT NAME", "yah");
echo constant("INVALID CONSTANT NAME") . "\n";
bar
uni
yah
定数の定義 - const キーワード #
const
キーワードもある。
<?php
const FOO = "bar";
echo FOO . "\n";
const TAKO = array("ika", "uni", "maguro");
echo TAKO[1] . "\n";
bar
uni
定数のスコープ #
グローバル。
定義済み定数の取得 - get_defined_constants() #
<?php
define("FOO", "bar");
const TAKO = array("ika", "uni", "maguro");
define("INVALID CONSTANT NAME", "yah");
var_dump(get_defined_constants());
array(1657) {
["E_ERROR"]=>
int(1)
["E_RECOVERABLE_ERROR"]=>
int(4096)
["E_WARNING"]=>
int(2)
:
(省略)
:
["FOO"]=>
string(3) "bar"
["TAKO"]=>
array(3) {
[0]=>
string(3) "ika"
[1]=>
string(3) "uni"
[2]=>
string(6) "maguro"
}
["INVALID CONSTANT NAME"]=>
string(3) "yah"
}
マジック定数 #
使われる場所によって値が変化する定数があり、コンパイル時に解決される。
__LINE__
__FILE__
__DIR__
__FUNCTION__
__CLASS__
__TRAIT__
__METHOD__
__NAMESPACE__
ClassName::class
<?php
echo __LINE__ . "\n";
echo __FILE__ . "\n";
echo __DIR__ . "\n";
function func() {
echo __FUNCTION__ . "\n";
}
func();
class Hoge {
function bar() {
echo __CLASS__ . "\n";
echo __METHOD__ . "\n";
}
}
(new Hoge())->bar();
2
/usr/src/myapp/magic_constant.php
/usr/src/myapp
func
Hoge
Hoge::bar