とぎぷろべい

包丁研ぎとプログラミングと米国株投資についてのなんやかんや

定数宣言について(PHP)

f:id:feci:20210727001932j:plain

PHP7

 

PHP7.4.1における定数宣言について。

<?PHP

const TAX = 10;                     //推奨されている定数宣言
define(TAX10);                    //推奨されていない定数宣言

echo "消費税は{TAX}%です。";       //消費税は{TAX}%です。
echo "消費税は". "TAX" ,'%です。'//消費税はTAX%です。
echo "消費税は" . TAX , '%です。'//消費税は10%です。

定数は変数とちがい、一度宣言をすると中の値を上書きすることができません。

もし上書きしようとするとエラーがでます。

 

定数の作り方は、上記のとおり2つのパターンがあります。

どちらのパターンでも、変数宣言とちがい頭のドル記号は必要ありません。

 

const 〇〇 = △△; のパターンは、PHPで推奨されている定数宣言のパターンです。

〇〇の部分に定数名が入り、△△の部分に定数に格納される値が入ります。

 

define(〇〇, △△); のパターンは、現在では推奨されない定数宣言のパターンとなっています。

このパターンではエラーこそ吐かれませんが、PHPは毎回Warningを出して警告をしてきます。

 

 

ちなみにこれらの定数宣言における命名規則は、変数宣言のときの命名規則とまったく同じです。

あとPHPでは、定数名は大文字表記にするのが暗黙の了解というか慣例となっているようです。

 

 

あと定数と変数とでは、printやechoで処理するときの挙動が多少ちがいます。

変数では echo "消費税は{$tax}%です"; と記述すると、ちゃんと「消費税は10%です」という感じでブラケット内の変数が変数として処理されます。

 

しかし定数では、このブラケットを使った記述ではブラケット内の定数は定数としては処理されません。

ただの文字列として処理されてしまいます。

 

ちなみにこの挙動は、ピリオドやカンマを使った文字列の連結の場合でも同じです。

もし変数であれば echo "消費税は". "$tax" ,'%です'; と記述すればちゃんと「消費税は10%です」と出力されますが、定数ではこのようなダブルクオーテーションで囲う方法もアウトです。

定数としてではなく、ただの文字列として処理されてしまいます。

 

 

以上です。