PHP: 定数

PHP: 定数

August 26, 2020
PHP
PHP

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