PHP 5.4.36 Released

構文

define() 関数を使用することにより、 定数を定義することが可能です。PHP 5.3.0 以降では、 クラス定義の外部で const キーワードを使って定数を定義することもできます。 定数が一度定義されると、 変更または未定義とすることはできません。

PHP 5.6 より前のバージョンでは、定数に指定できるのは、スカラデータ (boolean, integer, double, string) のみです。 PHP 5.6 以降では、array の定数も指定できるようになりました。 resource の定数を指定することもできますが、 予期せぬ結果を引き起こすことがあるので避けるべきです。

単に定数の名前を指定することにより、その値を得ることが可能です。 変数とは異なり、その前に $ は不要です。 定数の名前を動的に得る必要がある場合、定数の値を読むために関数 constant() を使用することも可能です。 定義済の定数の一覧を得るには、 get_defined_constants() を使用してください。

注意: 定数と(グローバル)変数は、異なる名前空間にあります。 例えば、TRUE$TRUE は違うものを意味します。

未定義の定数を使用した場合、ちょうどstringとして コールしたかのように(CONSTANT vs "CONSTANT")、 PHPはその定数自体の名前を使用したと仮定します。 この際、E_NOTICE が発生します。 ある定数が設定されているかどうかを知るには、 defined() 関数を使用してください。 なぜ $foo[bar]が間違っている (まずbarを定数としてdefine()しなければ) のかというマニュアルもご覧ください。 定数がセットされているかを単にチェックするには defined()を使用してください。

変数との違いは次のようになります。

  • 定数は、前にドル記号($)を要しません。
  • 定数を定義することができるのは、define()関数 のみです。単なる代入による定義はできません。
  • 定数は、定義することができ、変数のスコープ規則に関係なく、あら ゆる場所からアクセス可能です。
  • 定数は一度設定されると再定義または未定義とすることはできません。
  • 定数は、スカラー値 (PHP 5.6 以降は、スカラー値あるいは配列) としてのみ評価可能です。 配列を、定数スカラー式としても使えます (例:const FOO = array(1,2,3)[0];) が、最終的な結果はスカラー値でなければいけません。

例1 定数の定義

<?php
define
("CONSTANT""Hello world.");
echo 
CONSTANT// "Hello world."を出力
echo Constant// "Constant" を出力し、警告 (notice) を発行
?>

例2 const キーワードによる定数の定義

<?php
// PHP 5.3.0 以降で動作します
const CONSTANT 'Hello World';

echo 
CONSTANT;

q// PHP 5.6.0 以降で動作します
const ANOTHER_CONST CONSTANT.'; Goodbye World';

echo 
ANOTHER_CONST;
?>

注意:

define() による定数の定義とは反対に、 const キーワードで定義した定数はトップレベルのスコープで宣言しなければなりません。 これはコンパイル時に定義されるからです。 つまり、関数、ループ、if 文、または try/catch ブロックの内部では宣言できないということです。

オブジェクト定数 も参照ください。

add a note add a note

User Contributed Notes 5 notes

up
9
uramihsayibok, gmail, com
5 years ago
Don't let the comparison between const (in the global context) and define() confuse you: while define() allows expressions as the value, const does not. In that sense it behaves exactly as const (in class context) does.

<?php

// this works
/**
* Path to the root of the application
*/
define("PATH_ROOT", dirname(__FILE__));

// this does not
/**
* Path to configuration files
*/
const PATH_CONFIG = PATH_ROOT . "/config";

// this does
/**
* Path to configuration files - DEPRECATED, use PATH_CONFIG
*/
const PATH_CONF = PATH_CONFIG;

?>
up
1
Fred
9 days ago
The const keyword will not allow anything that may have to be "processed":

$color = "red";
const RED = "This is the color $color"; //Doesn't work
define(strtoupper($color), "This is the color $color") // Works fine
up
-2
0gb dot us at 0gb dot us
2 years ago
While most constants are only defined in one namespace, the case-insensitive true, false, and null constants are defined in ALL namespaces. So, this is not valid:

<?php namespace false;
const
ENT_QUOTES = 'My value';
echo
ENT_QUOTES;//Outputs as expected: 'My value'

const FALSE = 'Odd, eh?';//FATAL ERROR! ?>

Fatal error: Cannot redeclare constant 'FALSE' in /Volumes/WebServer/0gb.us/test.php on line 5
up
-3
kuzawinski dot marcin at NOSPAM dot gmail dot com
8 months ago
Actually, there is a way, to (re)declare FALSE (also: False, false, TRUE, NULL, etc.) constant, even if it is already declared:

<?php

var_dump
(constant('I_DONT_EXIST')); // warning "Couldn't find constant I_DONT_EXIST"
var_dump(constant('FALSE'));  //no warning, output: bool(false)

define('FALSE', TRUE);

var_dump(constant('FALSE')); //output: bool(true)

// but...

var_dump(constant('false')); // output: bool(false)
var_dump(FALSE); // output: bool(false);

?>
up
-27
timucinbahsi at gmail dot com
2 years ago
Constant names shouldn't include operators. Otherwise php doesn't take them as part of the constant name and tries to evaluate them:

<?php
define
("SALARY-WORK",0.02); // set the proportion

$salary=SALARY-WORK*$work; // tries to subtract WORK times $work from SALARY
?>
To Top