【PHP8.x】is_resource関数の使い方

is_resource関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

is_resource関数は、与えられた変数がPHPにおける「リソース」型であるかどうかを検査する関数です。

PHPのリソース型とは、ファイルハンドル、データベース接続、画像データといった、プログラムが外部のシステムと連携するためにPHPが内部的に管理する特別なデータ型のことです。これらは通常の文字列や数値、配列、オブジェクトとは異なり、例えばfopen()(ファイルを開く)やmysqli_connect()(データベースに接続する)のような特定の関数が成功した場合に返されます。リソースは、使い終わったら適切に解放する(例えばfclose()でファイルを閉じる)必要があります。

この関数は、引数に渡された変数が実際に有効なリソースである場合、真偽値のtrueを返します。それ以外の型(整数、文字列、配列、オブジェクトなど)である場合や、無効なリソースである場合はfalseを返します。

is_resource関数を使用することで、後続のリソース操作(例えばファイルを閉じたり、データベース接続を閉じたりする処理)を実行する前に、対象の変数が本当にリソース型であることを確実に確認できます。これにより、意図しないエラーを防ぎ、プログラムの安定性を高めることができます。例えば、fopen()が何らかの理由で失敗しfalseを返した場合に、誤ってfclose(false)を実行してしまうような状況をis_resourceで事前にチェックし、回避することが可能です。安全なリソース管理を行う上で、この関数は非常に重要な役割を担います。

構文(syntax)

1<?php
2// bool is_resource ( mixed $value )
3// 変数 $value がリソース型であるかを確認し、結果(true または false)を返します。
4is_resource($value);

引数(parameters)

mixed $value

  • mixed $value: リソース型であるかを判定したい値

戻り値(return)

bool

指定された変数がリソース型である場合に true を、それ以外の場合に false を返します。

サンプルコード

PHP 8 is_resource() でリソース型を判定する

1<?php
2
3/**
4 * PHPのis_resource()関数の基本的な使用方法をデモンストレーションします。
5 *
6 * is_resource()は、指定された変数がリソース型であるかどうかをチェックします。
7 * PHP 8以降では多くのリソースがオブジェクトに移行しましたが、ファイルハンドルなど
8 * 一部の組み込み型はまだリソースとして扱われます。
9 */
10function demonstrateIsResource(): void
11{
12    echo "--- is_resource() 関数のデモンストレーション ---\n\n";
13
14    // 1. ファイルリソースの確認
15    // fopen()はファイルリソースを返します。ここではメモリ上の仮想ファイルを使用します。
16    $fileHandle = fopen('php://memory', 'r');
17
18    echo "fopen('php://memory', 'r') で得られた \$fileHandle:\n";
19    echo "  型: " . get_debug_type($fileHandle) . "\n";
20    // is_resource() を使って、ファイルハンドルがリソース型であるかを確認します。
21    echo "  is_resource(\$fileHandle): " . var_export(is_resource($fileHandle), true) . "\n\n";
22
23    // リソースは使用後に閉じるべきです。
24    fclose($fileHandle);
25    echo "fclose(\$fileHandle) 後:\n";
26    echo "  型: " . get_debug_type($fileHandle) . "\n"; // 閉じた後の型は通常 NULL または unknown
27    // 閉じたリソースに対しては false を返します。
28    echo "  is_resource(\$fileHandle): " . var_export(is_resource($fileHandle), true) . "\n\n";
29
30    // 2. その他の型の確認(リソースではないケース)
31    $stringVar = "Hello PHP!";
32    echo "文字列変数 \$stringVar = \"Hello PHP!\":\n";
33    echo "  型: " . get_debug_type($stringVar) . "\n";
34    // 文字列はリソースではありません。
35    echo "  is_resource(\$stringVar): " . var_export(is_resource($stringVar), true) . "\n\n";
36
37    $intVar = 12345;
38    echo "整数変数 \$intVar = 12345:\n";
39    echo "  型: " . get_debug_type($intVar) . "\n";
40    // 整数はリソースではありません。
41    echo "  is_resource(\$intVar): " . var_export(is_resource($intVar), true) . "\n\n";
42
43    $objectVar = new stdClass();
44    echo "オブジェクト変数 \$objectVar = new stdClass():\n";
45    echo "  型: " . get_debug_type($objectVar) . "\n";
46    // オブジェクトもリソースではありません。(PHP 8では多くのリソースがオブジェクトに移行しています)
47    echo "  is_resource(\$objectVar): " . var_export(is_resource($objectVar), true) . "\n\n";
48
49    // 補足コメント
50    echo "補足: PHP 8以降、以前リソースとして扱われていた多くのものがオブジェクトに移行しました。\n";
51    echo "is_resource() は、現在では主にファイルハンドルなどの伝統的なリソース型にのみ true を返します。\n";
52}
53
54// 関数の実行
55demonstrateIsResource();

PHPのis_resource()関数は、指定された変数が「リソース型」であるかを判定する関数です。この関数は引数にチェックしたい任意の変数を一つ取り、その変数がリソース型であればtrueを、そうでなければfalseをブール値として返します。

PHP 8では、以前リソースとして扱われていた多くのものがオブジェクトに移行しましたが、fopen()などで取得されるファイルハンドルなど、一部の伝統的な組み込み型は依然としてリソース型として扱われます。そのため、is_resource()関数は現在、主にこれらの特定の外部リソースへの接続状態を確認する際に利用されます。

サンプルコードでは、fopen()で開かれたファイルハンドルがリソース型であることをis_resource()trueと評価することを示しています。しかし、そのファイルハンドルをfclose()で閉じた後はリソース型ではなくなるため、falseが返されます。また、文字列、整数、オブジェクトといったリソース型ではない一般的な変数に対しては、すべてfalseが返されることが確認できます。この関数は、ファイル操作やデータベース接続など、外部リソースが期待通りに有効な状態にあるかをプログラムで判断する際に役立ちます。

is_resource()関数は、変数が「リソース型」であるかを判定します。PHP 8では、以前リソースとして扱われていた多くのものがオブジェクトに移行しました。そのため、この関数は主にファイルハンドルなどの伝統的な組み込みリソースに対してのみtrueを返します。

サンプルコードのように、fopen()で開いたファイルハンドルはリソースですが、fclose()で閉じられた後のハンドルはリソースではなくなりfalseを返します。リソースは使用後に必ずfclose()などで閉じるようにしましょう。文字列、数値、オブジェクトなどの一般的なデータ型はリソースではないため、常にfalseが返されます。この関数の利用は、ファイルやデータベース接続といった特定の外部リソースの型確認に限定されることが多いです。

関連コンテンツ

【PHP8.x】is_resource関数の使い方 | いっしー@Webエンジニア