PHPで変数の型を取得するには?

19/05/12 23:08:06     19/06/02 13:21:47

PHPで変数の型を取得するには?

PHPには変数の型を取得する関数が用意されており、それを使えば簡単に変数の型を調べることが可能です。

gettype関数で変数の型取得

PHPで変数の型を取得する際に使用するのがgettype関数です。gettype関数の構文は以下のようになります。

string gettype ( mixed $var )

引数には型を調べたい変数を指定します。なんとなく戻り値は引数に設定した値の方になるのでvarで設定しておけば良いのかな、と思われるかもしれませんが、100%String型で戻ってきます。

なので戻り値をどこかの変数に入れたい場合、その変数はstring型で宣言する必要があります。また戻り値の種類を上げると以下のようになります。

・boolean
真偽( true と false )

・integer
整数型

・double
浮動小数点数型(float型)

・string
文字列

・array
配列

・object
オブジェクト

・resource
リソース

・unknown type
不明

この中のいずれかが戻り値として返ってきます。PHPの基本的な型すべてになります。これ以外の型が存在するのかはわかりませんが、たとえば誰かが特殊な型を用意してそれが使えたとしても、gettype関数で取得するとunknown typeになります。

PHPのすべての型とgettype関数の型が連動しているというよりは、あくまでもgettype内で用意された型が返ってくる仕様になっています。

それではサンプルコードを紹介します。

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

function getVarType($var, $var_type){
    print('変数の中身は'.$var.'です。<br>');
    print('変数の型は'.$var_type.'です。<br><br>');
}

$var = 'abcdef';
$var_type = gettype($var);
getVarType($var, $var_type);

$var = 123456;
$var_type = gettype($var);
getVarType($var, $var_type);

$var = 12345.6;
$var_type = gettype($var);
getVarType($var, $var_type);

$var = NULL;
$var_type = gettype($var);
getVarType($var, $var_type);

?>
</body>
</html>

上記のソースコードをブラウザ経由で見ると以下のように表示されています。

変数の中身はabcdefです。
変数の型はstringです。

変数の中身は123456です。
変数の型はintegerです。

変数の中身は12345.6です。
変数の型はdoubleです。

変数の中身はです。
変数の型はNULLです。

ソースコードの内容としてはシンプルかと思います。まずPHPを動かすための極めて簡単なHTMLを用意し、次にPHPを書いています。getVarTypeメソッドを用意し、第一引数は変数、第二引数は変数の型になっています。

そして次に四つの変数を用意し、メソッドを呼び出しています。各変数ごとに二回メソッドを呼び出していますが、まず最初の呼び出しでは第一引数を取得しています。

つまり変数の値です。二回目のメソッド呼び出しでは第二引数を取得しています。第二引数は変数の型です。そのため最終的な表示結果としては、各変数ごとに第一引数の変数の値と、第二引数の変数の型が表示されました。

settype関数で変数の型を変換

gettype関数とセットで使われることが多いのがsettype関数です。gettype関数は変数の型を取得して確認するための関数でしたが、settype関数は変数の型を変換するための関数になります。構文は以下です。

bool settype ( mixed &$var , string $type )

gettype関数はstring型でしたが、settype関数はbool型で使用します。引数は第一引数で変数を指定し、第二引数で変換する方を指定します。なぜ戻り値がboolなのか疑問に感じた方もいるかもしれません。

settype関数は変数の型を変える関数なので、本来戻り値は不要です。ではなぜ
boolなのかというと、変数の型の変換に成功した場合はtrue、失敗した場合はfalseを返す仕様になっているからです。

ちなみに型はgettype関数のときとほぼ同じなのですが、gettype関数では返ってこない書き方で変数の型を指定することもできます。具体的には以下のようになります。

bool, boolean
int, intval
float, double
string
array
object
null

たとえばgettype関数だと小数点以下を含む値はdoubleで返ってくる仕様になっていますが、settype関数で変数の型を書き換える際にはfloatで指定することもできます。またbooleanをboolと省略したりもできます。サンプルコードは以下です。

<?php
// 変数を定義
$var1 = "12345";
// 文字列 → 整数の変換
var_dump( settype($var1,"int") );
var_dump( $var1 );

// 変数を定義
$var2 = true;
// 論理値 → 文字列
settype($var2,"string");
var_dump( $var2 );
?>

これを実行すると、以下のように変数の型が変換されました。

bool(true)
int(12345)
string(1) “1”

gettype関数との対比でsettype関数を紹介しましたが、型変換は普通にキャストしても問題ありません。一応紹介しておくとまず構文は以下のようになります。

(int) $var;

キャストで指定する方の一覧は以下です。

・(bool), (boolean)
「論理値」へキャスト

・(int), (intval)
「整数」へキャスト

・(float), (double), (real)
「浮動小数点数」へキャスト

・(string)
「文字列」へキャスト

・(array)
「配列」へキャスト

・(object)
「オブジェクト」へキャスト

・(unset)
「ヌル値」へキャスト

サンプルコードは以下です。

<?php
$str = "100";
var_dump( $str );
var_dump( (int)$str );
?>

このコードを実行すると以下のようになります。

string(3) “100”
int(100)

string型からint型に変換されました。またあまり使用頻度は高くないかもしれませんが、unsetを指定するとすべてNULLになります。サンプルコードは以下です。

$var = 3.141592;
var_dump( $var );
var_dump( (unset)$var );
?>

これを実行すると、以下のようにfloat型の変数がNULLになります。

float(3.141592)
NULL

この型キャストでは、変数の型だけでなく変数がNULLになっています。

以上変数の型取得や型変換について解説しました。使い方もシンプルで、引数も多くはないのでややこしい点は特になかったかと思います。

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する