定義と使い方
- PHPバージョン
- 4+
is_object()関数は、指定された値がオブジェクト(object)型であるかを確認します。
引数として渡された値がオブジェクト型であればtrueを返し、そうでなければfalseを返します。
オブジェクト(object)型は、オブジェクトを表すデータ型です。PHPにおいてオブジェクトはクラスから生成され、クラスはオブジェクトのプロパティとメソッドを定義します。オブジェクトはこれらのクラスのインスタンスとして、データと振る舞いを共に保持しています。
基本例
class MyClass {
public $name = 'John Doe';
public $age = 30;
}
$obj1 = new MyClass();
$obj2 = clone $obj1;
/* クラス */
var_dump(is_object($obj1)); // bool(true)
var_dump(is_object($obj2)); // bool(true)
/* 配列 */
var_dump(is_object(array(1, 2, 3))); // bool(false)
var_dump(is_object([1, 2, 3])); // bool(false)
var_dump(is_object([])); // bool(false)
/* 文字列および数値 */
var_dump(is_object('Hello World!')); // bool(false)
var_dump(is_object(7)); // bool(false)
var_dump(is_object(0.13)); // bool(false)
/* ブール値 */
var_dump(is_object(true)); // bool(false)
/* null */
var_dump(is_object(null)); // bool(false)
/* 型キャスト(Type Casting、型変換) */
var_dump(is_object((object) 1)); // bool(true) -> 整数をオブジェクトに型変換
var_dump(is_object((object) 1.9)); // bool(true) -> 浮動小数点数をオブジェクトに型変換
var_dump(is_object((object) true)); // bool(true) -> ブール値をオブジェクトに型変換
参考にしてください!gettype()関数は、与えられた値のデータタイプを文字列として返します。
構文
is_object(mixed $value): bool
引数
$value |
必須。オブジェクト(object)型であるかを確認する値です。 |
|---|
戻り値
引数として渡された値がオブジェクト型であればtrueを返し、そうでなければfalseを返します。
PHP 7.2.0 からの変更点
PHP 7.2.0より、is_object()関数の動作が変更されました。以前は、アンシリアライズされたオブジェクトにおいてクラス定義が存在しない場合(__PHP_Incomplete_Classを指す場合)、is_object()はfalseを返していました。しかし、PHP 7.2.0からは、このような場合でもtrueを返すように変更されています。
注意点
is_object()関数を使用する際、注意すべき点があります。
空のオブジェクトでもtrueを返します
is_object()関数は、空のオブジェクトを含め、オブジェクトを指すすべての変数に対してtrueを返します。これは、is_object()関数が該当する変数がオブジェクトであるかどうかを確認するためのものだからです。つまり、空のオブジェクトであってもオブジェクトとして認識し、trueを返します。
// 空のオブジェクトを生成
$empty_object = new stdClass();
var_dump(is_object($empty_object)); // bool(true)
配列はオブジェクトとはみなされません
配列はオブジェクトと似たような仕組みで動作することがありますが、オブジェクトと同一ではありません。オブジェクトは配列よりもはるかに多くの機能を提供し、配列とは異なる仕組みで動作するさまざまな特徴を持っています。そのため、is_object()関数を使用して変数の型を確認する際、配列は常にfalseを返すという点に注意する必要があります。
$arr = array(1, 2, 3);
var_dump(is_object($arr)); // bool(false)
変数の型が配列であるかを確認するには、is_array()関数を使用するのが適切です。
is_array()関数を使用
$arr = array(1, 2, 3);
var_dump(is_array($arr)); // bool(true)
活用例
is_object()関数は、次のような場合に使用すると便利、または有用です。
コードの安全性を高めるために
コードで特定の変数がオブジェクトであるかを確認する必要がある場合、is_object()関数を使用して安全に検査できます。これにより、予期しない型の変数が渡されたときに発生する可能性のあるエラーを防止できます。
function my_function($data) {
if (!is_object($data)) {
throw new InvalidArgumentException('引数はオブジェクトである必要があります。');
}
// ...
}
上記のコードでmy_function()は$dataという引数を必要とします。しかし、もし関数が呼び出される際にオブジェクトではない他の型のデータが渡された場合、例外を発生させることで関数が正常に動作しないことを防ぐことができます。
オブジェクト関連の機能を実行する前に
オブジェクト関連の機能を実行する前にis_object()関数を使用して変数が実際にオブジェクトであるかを確認することが推奨されます。これによりエラーを防止し、コードの可読性を高めることができます。
$data = maybe_get_object();
if (is_object($data)) {
foreach ($data as $property => $value) {
// オブジェクトの各プロパティに対する操作を実行
}
}
コードの補足説明foreach反復文は配列やオブジェクトを巡回して繰り返し処理を行う際に使用する代表的な構文です。
上記のコードで$data変数がmaybe_get_object()関数を通じて返された値であると仮定します。しかし、返された値がオブジェクトではない可能性もあります。この場合にis_object()関数を使用して$dataがオブジェクトであるかを確認できます。