PHPでの定数の定義方法にはconstを使ったやり方と、define()を使ったやり方があります。
constは命令文であり、define()は関数です。
本記事では、それぞれどのような違いがあるのか確認していきます。
目次
const と define() の違い
クラス定数での宣言
constの場合・・・OK
constは、クラス定数での宣言が可能です。
<?php
class Test001
{
const TAX_RATE = 1.1;
}
-------------------------------------------
PS C:\xampp\htdocs\test> php Test001.php
PS C:\xampp\htdocs\test>
define()の場合・・・NG
define()はクラス定数での宣言が行えません。
<?php
class Test001
{
define('TAX_RATE', 1.1); // ★NG
}
-------------------------------------------
PS C:\xampp\htdocs\test> php Test001.php
Parse error: syntax error, unexpected identifier "define", expecting "function" or "const" in C:\xampp\htdocs\test\Test001.php on line 4
トップレベル以外での宣言
constの場合・・・NG
constは、トップレベル以外での宣言は行えません。
<?php
if (1==1) {
const TAX_RATE = 1.1; // ★NG
}
---------------------------------
PS C:\xampp\htdocs\test> php Test001.php
Parse error: syntax error, unexpected token "const" in C:\xampp\htdocs\test\Test001.php on line 3
define()の場合・・・OK
define()は、トップレベル以外での宣言が行えます。
<?php
if (1==1) {
define('TAX_RATE', 1.1);
}
---------------------------------
PS C:\xampp\htdocs\test> php Test001.php
PS C:\xampp\htdocs\test>
変数や関数の戻り値の利用
constの場合・・・NG
constは、設定値に変数の利用ができない。
<?php
$greeting = 'Hello World!';
const GREETING = $greeting; // ★NG
echo GREETING;
---------------------------------
PS C:\xampp\htdocs\test> php Test001.php
PHP Fatal error: Constant expression contains invalid operations in C:\xampp\htdocs\test\Test001.php on line 3
constは、設定値に関数の戻り値の利用ができない。
<?php
const NAME = mb_substr('Hello World!', 6); // ★NG
echo NAME;
---------------------------------
PS C:\xampp\htdocs\test> php Test001.php
PHP Fatal error: Constant expression contains invalid operations in C:\xampp\htdocs\test\Test001.php on line 2
define()の場合・・・OK
define()は、設定値に変数の利用が可能。
<?php
$greeting = 'Hello World!';
define('GREETING', $greeting);
echo GREETING;
---------------------------------
PS C:\xampp\htdocs\test> php Test001.php
Hello World!
define()は、設定値に関数の戻り値の利用が可能。
<?php
define('NAME', mb_substr('Hello World!', 6));
echo NAME;
---------------------------------
PS C:\xampp\htdocs\test> php Test001.php
World!
まとめ
まとめると以下の通り。
基本的にはconstを使用して、どうしてもconstが使えない場合のみdefine()を使用する。
const | define() | |
クラス定数での宣言 | 〇 | × |
トップレベル以外での宣言 | × | 〇 |
変数や関数の戻り値の利用 | × | 〇 |
コメント