PHP7.4.1における変数のデータ型と型キャストについて。
//①値は一致しているがデータ型がちがう場合
$aaa = 10; //int型(整数型)の10
$bbb = "10"; //str型(文字列型)の10
if ($aaa === $bbb) {
echo 'データ型も値もすべて一致しています!';
} elseif ($aaa == $bbb) {
echo 'データ型はちがいますが値は同じです。';
} else {
echo 'データ型も値もすべてがちがいます。';
}
//②値もデータ型がちがう場合
$aaa = 10; //int型(整数型)の10
$bbb = "1k"; //str型(文字列型)の1k
if ($aaa === $bbb) {
echo 'データ型も値もすべて一致しています!';
} elseif ($aaa == $bbb) {
echo 'データ型はちがいますが値は同じです。';
} else {
echo 'データ型も値もすべてがちがいます。';
}
//③型キャストをして異なるデータ型を一致させた場合
$aaa = 10; //int型(整数型)の10
$bbb = (int)'10'; //str型(文字列型)の10を型キャスト
if ($aaa === $bbb) {
echo 'データ型も値もすべて一致しています!';
} elseif ($aaa == $bbb) {
echo 'データ型はちがいますが値は同じです。';
} else {
echo 'データ型も値もすべてがちがいます。';
}
//④型キャストをして異なるデータ型を一致させた場合の別パターン
$aaa = 10; //int型(整数型)の10
$bbb = '10'; //str型(文字列型)の10
if ($aaa === (int)$bbb) {
echo 'データ型も値もすべて一致しています!';
} elseif ($aaa == $bbb) {
echo 'データ型はちがいますが値は同じです。';
} else {
echo 'データ型も値もすべてがちがいます。';
}
変数や定数にはデータ型というものがあります。
複数の値を処理する過程においては、上記のプログラムのように「値は同じだけどデータ型はint型とstr型で一致してないよね」というようなパターンも当然ありえます。
このような場合は、比較演算子の == ではtrueでも、=== ではfalseという結果になります。
上記のプログラムの出力結果は、それぞれ以下のとおりです。
①の出力結果
データ型はちがいますが値は同じです。
②の出力結果
データ型も値もすべてがちがいます。
③の出力結果
データ型も値もすべて一致しています!
④の出力結果
データ型も値もすべて一致しています!
③や④のパターンのようにデータ型がちがっていても、キャスト演算子を使ってデータ型を特定の型に変換する、ということもできます。
このようなキャスト演算子を使ったデータ型の変換を、型キャストと言います。
主なキャスト演算子の一覧は、以下のとおりです。
(int) 整数へのキャスト
(integer) 整数へのキャスト
(string) 文字列へのキャスト
(bool) 論理値へのキャスト
(boolean) 論理値へのキャスト
(float) 浮動小数点へのキャスト
(double) 浮動小数点へのキャスト
(real) 浮動小数点へのキャスト
(array) 配列へのキャスト
(object) オブジェクトへのキャスト
(unset) NULLへのキャスト
定数は値の再代入(上書き)はできませんが、この方法での型変換は可能です。
また、主なデータ型の一覧は以下のとおりです。
●スカラー型(単一の値)
論理型(bool型) 1か0。
整数型(int型) 小数点を含まない数値。
浮動小数点型(float型) 小数点を含む数値。
文字列型(str型) 文字や文字列や数字や記号。
●複合型(複数の値)
配列型(array型) 複数の数値や文字列など。
オブジェクト型(object型) ???
●特別型
リソース型(resource型) 外部リソースを使用。
NULL型(null型) NULL。からっぽ。
●???
iterable型 ???
コールバック型(callable型) ???
またPHPでは、変数や定数のデータ型を判別する関数も用意されています。
これらの関数の返り値はすべて論理型となっています(true または false)。
is_string() 文字列型か否かの判別。
is_int() 整数型か否かの判別。
is_float() 浮動小数点型か否かの判別。
is_bool () 論理値型か否かの判別。
is_object() オブジェクト型か否かの判別。
is_array() 配列型か否かの判別。
is_resource() リソース型か否かの判別。
is_null() NULL型か否かの判別。
またPHPでは上記のデータ型判別関数のほかに、gettype関数というものも用意されています。
gettype関数では gettype() の括弧内に型を調べたい変数または定数を記入すると、返り値としてその型の文字列がダブルクオーテーションに囲まれた状態で出力されます。
以上です。