PHPのリソース(Resource)型とは?定義・使い方とget_resource_type()関数を解説
リソース型の定義と使い方
PHPにおけるリソース(Resource)は、外部リソースへの参照を保持するための特殊なデータ型です。リソース変数は、ストリーム、ファイル、データベース接続など、外部のデータソースへの参照として機能します。これらのリソースは、それぞれ専用のPHP関数によって作成されます。たとえば、fopen()関数はディスク上のファイルを開き、その参照がリソース変数に格納されます。
PHPのZendエンジンは参照カウント方式を採用しています。そのため、参照カウントがゼロになったリソースはガベージコレクタによって自動的に破棄されます。したがって、リソース型が使用しているメモリを手動で解放する必要はありません。
PHPスクリプトでは、対応する関数を使うことで、さまざまな種類のリソースを扱うことができます。主なリソースタイプの一覧を以下の表にまとめました。
| リソースタイプ名 | 作成する関数 | 破棄する関数 | 説明 |
| bzip2 | bzopen() | bzclose() | Bzip2圧縮ファイル |
| curl | curl_init() | curl_close() | Curlセッション |
| ftp | ftp_connect() | ftp_close() | FTPストリーム |
| mssql link | mssql_connect() | mssql_close() | Microsoft SQL Serverデータベースへのリンク |
| mysql link | mysql_connect() | mysql_close() | MySQLデータベースへのリンク |
| mysql result | mysql_db_query() | mysql_free_result() | MySQLの結果セット |
| oci8 connection | oci_connect() | oci_close() | Oracleデータベースへの接続 |
| ODBC link | odbc_connect() | odbc_close() | ODBCデータベースへのリンク |
| pdf document | pdf_new() | pdf_close() | PDFドキュメント |
| stream | opendir() | closedir() | ディレクトリハンドル |
| stream | fopen()、tmpfile() | fclose() | ファイルハンドル |
| socket | ― | fclose() | ソケットハンドル |
| xml | xml_parser_create() | xml_parser_free() | XMLパーサー |
| zlib | gzopen() | gzclose() | gz圧縮ファイル |
| zlib.deflate | deflate_init() | なし | インクリメンタルdeflateコンテキスト |
| zlib.inflate | inflate_init() | なし | インクリメンタルinflateコンテキスト |
なお、表内のmysql_*系関数およびmssql_*系関数は、現在のPHPでは非推奨または削除されており、代わりにmysqli拡張モジュールやPDOを使用することが推奨されています。
また、PHPには変数のリソースタイプを取得できるget_resource_type()関数が用意されています。
構文
get_resource_type ( resource $handle ) : string
$handleには、タイプを取得したいリソース変数を指定します。この関数は、対応するリソースタイプ名を文字列として返します。
次の例では、ディスク上のファイルのリソースタイプを確認しています。
例1:var_dump()による確認
<?php
$fp = fopen("test.txt", "w");
var_dump($fp);
?>出力
このコードを実行すると、次のような結果が出力されます。
resource(5) of type (stream)
例2:get_resource_type()関数の使用
<?php
$fp = fopen("test.txt", "w");
echo get_resource_type($fp) . "\n";
?>出力
このコードを実行すると、次のような結果が出力されます。
stream
-
PHPのinstanceof演算子とは?オブジェクトの型判定方法をわかりやすく解説
はじめにPHPでは、ある変数が特定のクラスのオブジェクト(インスタンス)であるかどうかを判定できます。この目的のために用意されているのが、instanceof 演算子です。instanceof演算子を使うことで、オブジェクト指向プログラミングにおいて型のチェックを行い、安全で堅牢なコードを書くことが可能になります。基本構文$var instanceof クラス名この演算子は、$var が指定したクラスのオブジェクトであればブール値の TRUE(true) を返し、そうでなければ FALSE(false) を返します。基本的な使用例次の例では、instanceof演算子を使って、変数 $a がユ
-
システムリソースとは?4つの種類と仕組み、エラーの直し方を徹底解説
「限られたリソースを最大限に活かす力」は、あらゆる場面で魅力的な特性です。ここでいう「有効活用」とは、大量のリソースを保有していることではなく、手持ちの scarce なリソースの潜在能力を最大限に引き出す能力を指します。これは現実社会だけでなく、私たちが日々使っているハードウェアやソフトウェアにもそのまま当てはまります。 たとえば、高性能な車は多くの人にとって憧れの存在ですが、実際にスポーツカーやスポーツバイクを購入する人はごく一部です。購入しない理由を尋ねると、多くの人は「実用的じゃないから」と答えるでしょう。 つまり、社会全体としても私たちの選択は「効率性」に傾いているのです。大衆に