おぼえがき

過ちては則ち改むるにうんぬんかんぬん

変数のデータ型と型キャストについて(PHP)

f:id:feci:20210727001932j:plain

PHP7

 

PHP7.4.1における変数のデータ型と型キャストについて。

<?php

//①値は一致しているがデータ型がちがう場合
$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() の括弧内に型を調べたい変数または定数を記入すると、返り値としてその型の文字列がダブルクオーテーションに囲まれた状態で出力されます。

 

 

以上です。