こんにちはフロントエンドエンジニアのまさにょんです!
今回は、PHPの define と defined の違いと使い方について解説して行きます。
ちなみに先に結論から言うと、define()は定数を宣言するためのメソッドで、defined()は定数の存在をCheckするメソッドです。
目次
define()で定数を定義する
phpでは、const構文とdefine()のどちらかで定数を定義することができます。
今回は、define()を使った定数の定義と、defined()を使った確認についてみて行きます。
define — 名前を指定して定数を定義する
define(string
$constant_name
, mixed$value
, bool$case_insensitive
=false
): bool実行時に、名前を指定して定数を定義します。
[ パラメータ ]1. constant_name
定数の名前
2. value
定数の値です。
PHP 5 では、
value
は スカラー値 (int、 float、string、bool あるいはnull
) でなければいけません。PHP 7 では配列を使うこともできます。
3. case_insensitive
true
を指定すると、定数は大文字小文字を区別しないようになります。デフォルトでは大文字小文字を区別します。
つまり
CONSTANT
とConstant
は別の値を表すわけです。大文字小文字を区別しない定数を定義するのは、 PHP 7.3.0 以降では推奨されなくなりました。
PHP 8.0.0 以降では、
false
のみを受け入れます。true
を渡すと、警告が発生します。定数の名前
[ 戻り値 ]成功した場合に
PHP-Manual: definetrue
を、失敗した場合にfalse
を返します。
<?php
// [ 定数の定義方法 define編 ]
// 1. 基本構文は、define(定数名, Setする値) です。
define('CONST_NAME', '定数');
// 定数名は、文字列として定義します。
// 2. 定数を参照する際は、「$」やクオーテーションで囲まず、そのまま定数名を記述する。
echo CONST_NAME;
// < 出力結果 >
// 定数
defined()で定数が宣言されているのかを確認する
defined(定数名) で定数の存在を確認できます。返り値は真偽値です。
defined — 指定した名前の定数が存在するかどうかを調べる
defined(string
$constant_name
): bool指定した定数が存在し、定義されているかどうかを調べます。
[ パラメータ ]constant_name
定数名
[ 戻り値 ]引用元: PHP-Manual: defined
constant_name
で指定した名前の定数が定義されている 場合にtrue
、その他の場合にfalse
を返します。
<?php
// [ defined()で定数の存在を確認 ]
define('ROBOTAMA', 'ロボ玉');
// 1. defined(定数名) で定数の存在を確認できる。返り値は真偽値。
$define_check = defined('ROBOTAMA');
// 2. PHPの真偽値は、出力すると「 1 / '' 」になるので、三項演算子で「 true / false 」に変換。
echo $define_check ? 'true' : 'false';
echo "\n";
// < 出力結果 >
// true
配列の定数を定義する
<?php
// [ 配列の定数を定義する ]
define('ROBOTAMA_PRPTOTYPE', [
'ロボ玉試作1号機',
'ロボ玉試作2号機',
'ロボ玉試作3号機'
]);
echo '最初に開発されたロボ玉は、' . ROBOTAMA_PRPTOTYPE[0] . 'です'. "\n";
// < 出力結果 >
// 最初に開発されたロボ玉は、ロボ玉試作1号機です
define('ROBOTAMA_PRPTOTYPE_PRICE', [
'ロボ玉試作1号機' => 1000,
'ロボ玉試作2号機' => 2000,
'ロボ玉試作3号機' => 3000
]);
foreach (ROBOTAMA_PRPTOTYPE_PRICE as $key => $value){
echo "{$key}のお値段は、{$value}円です!今がお買い得!". "\n";
}
// < 出力結果 >
// ロボ玉試作1号機のお値段は、1000円です!今がお買い得!
// ロボ玉試作2号機のお値段は、2000円です!今がお買い得!
// ロボ玉試作3号機のお値段は、3000円です!今がお買い得!
定数の「定義/未定義」を確認する関数を作成
<?php
// [ 定数の「定義/未定義」を確認する関数を作成 ]
define('ROBOTAMA', 'ロボ玉');
define('FROM', 'グンマー帝国');
// 定数の「定義/未定義」Check-Function
function DefineCheck (string $val) {
if (defined($val)){
echo '定義済み' . "\n";
} else {
echo '未定義' . "\n";
}
}
$const_key_check_list = [
'ROBOTAMA',
'HAKUTOU',
'FROM',
'MOMO'
];
foreach ($const_key_check_list as $val) {
DefineCheck($val);
}
// < 出力結果 >
// 定義済み
// 未定義
// 定義済み
// 未定義
Sample-Code-全文
<?php
// [ 定数の定義方法 define編 ]
// 1. 基本構文は、define(定数名, Setする値) です。
define('CONST_NAME', '定数');
// 定数名は、文字列として定義します。
// 2. 定数を参照する際は、「$」やクオーテーションで囲まず、そのまま定数名を記述する。
echo CONST_NAME;
// 定数
define('FROM', 'グンマー帝国');
$robotama = 'ロボ玉';
echo "{$robotama}の出身地は、" . FROM . "\n";
// ロボ玉の出身地は、グンマー帝国
// [ defined()で定数の存在を確認 ]
define('ROBOTAMA', 'ロボ玉');
$define_check = defined('ROBOTAMA');
echo $define_check ? 'true' : 'false';
echo "\n";
// true
// [ 配列の定数を定義する ]
define('ROBOTAMA_PRPTOTYPE', [
'ロボ玉試作1号機',
'ロボ玉試作2号機',
'ロボ玉試作3号機'
]);
echo '最初に開発されたロボ玉は、' . ROBOTAMA_PRPTOTYPE[0] . 'です'. "\n";
// 最初に開発されたロボ玉は、ロボ玉試作1号機です
define('ROBOTAMA_PRPTOTYPE_PRICE', [
'ロボ玉試作1号機' => 1000,
'ロボ玉試作2号機' => 2000,
'ロボ玉試作3号機' => 3000
]);
foreach (ROBOTAMA_PRPTOTYPE_PRICE as $key => $value){
echo "{$key}のお値段は、{$value}円です!今がお買い得!". "\n";
}
// ロボ玉試作1号機のお値段は、1000円です!今がお買い得!
// ロボ玉試作2号機のお値段は、2000円です!今がお買い得!
// ロボ玉試作3号機のお値段は、3000円です!今がお買い得!
// [ 定数の「定義/未定義」を確認する関数を作成 ]
// 定数の「定義/未定義」Check-Function
function DefineCheck (string $val) {
if (defined($val)){
echo '定義済み' . "\n";
} else {
echo '未定義' . "\n";
}
}
$const_key_check_list = [
'ROBOTAMA',
'HAKUTOU',
'FROM',
'MOMO'
];
foreach ($const_key_check_list as $val) {
DefineCheck($val);
}
// 定義済み
// 未定義
// 定義済み
// 未定義
Twitterやってます!Follow Me!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!