PHPで変数の型を調べたいことがたまにあります。その際の調べかたをいくつか紹介します。
gettype関数
gettype()はプリミティブ型・組み込み型のデータ型のチェックを行うために使用します。
gettype(7); // 'integer'
gettype(1.1); // 'double'
gettype('Sample'); // 'string'
gettype([1 ,2]); // 'array'
gettype(new stdClass); // 'object'
利用時の注意点
この関数はプリミティブ型や組み込み型は判定できますが、クラスなどになるとobject
となってしまうため、get_class関数を利用する必要があります。
is_xxxx関数
プリミティブ型・組み込み型に関しては、型チェック用の関数が数多く用意されています。
関数 | 説明 |
---|---|
is_array() | 変数の型が配列かどうかを調べる |
is_bool() | 変数の型が真偽値かどうかを調べる |
is_float() | 変数の型が float かどうかを調べる |
is_int() | 変数が整数型かどうかを調べる |
is_null() | 変数の型がnullかどうかを調べる |
is_numeric() | 変数の型が数字または数値形式の文字列であるかを調べる |
is_object() | 変数の型がオブジェクトかどうかを調べる |
is_resource() | 変数の型がリソースかどうかを調べる |
is_scalar() | 変数の型がスカラ1かどうかを調べる |
is_string() | 変数の型が文字列かどうかを調べる |
- スカラとはint、float、string、bool型のことを指します ↩︎
get_class関数
get_class()はオブジェクトのクラス名を調べます。
インスタンスなどのオブジェクトをgettype()で調べた場合、全てがobject
となってしまうので、こちらを使います。
$obj = new DateTime();
get_class($obj); // 'DateTime'
型演算子instanceof
instanceofは変数が特定のクラスのオブジェクトかどうかを調べます。継承したものも判定できます。
class Animal {}
class Dog extends Animal {}
$d = new Dog();
$d instanceof Dog; // true
$d instanceof Animal; // true
$dog = 'Dog';
$d instanceof $dog; // true
特定の型のみ通過させたい場合や、型の種類によって分岐させる時に利用します。
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
// 特定の型のみ通過
$d = new Dog();
if (! $d instanceof Dog) {
throw new Exception();
}
// 型の種類によって分岐
switch (true) {
case $d instanceof Dog:
echo "This is Dog";
break;
case $d instanceof Cat:
echo "This is Cat";
break;
default:
throw new Exception();
}
コメント