リソース型はいわゆるファイルなどのディスクリプタのことで、C言語ではファイルポインタと呼ばれるものです。
これまでリソース型をintでキャストすればIDが取れたんですが、PHP8で新たにIDを取得する関数が追加されました。
説明を見ると、リソース型をintでキャストして返してるそう。この関数作った意味ある?
最初に言ったように、新しく追加された get_resouce_id() は、リソースをintにキャストして返すだけの関数です。
説明もすぐに終わります。1分もかかりません。
サンプルコードを見れば一目瞭然。
<?php
$handle = fopen("php://stdout", "w");
echo (int)$handle . PHP_EOL;
echo get_resource_id($handle) . PHP_EOL;
if (fclose($handle)) {
echo 'file close OK.' . PHP_EOL;
}
echo (int)$handle . PHP_EOL;
echo get_resource_id($handle) . PHP_EOL;
実行結果
5
5
file close OK.
5
5
もう何も言うことがないくらい意味がわかる。
PHPのドキュメントでは、
『この関数は本質的にはリソースをintにキャストして返す』
『リソースの数値の識別子を識別するための、 型安全な方法を提供します。』
と言ってるので、キャストしないパターンもあるのでしょう。
また、今まで使ってきたintへのキャストでは安全でないことがあったんでしょうか?
そういう不具合に遭遇したことないけど。
まぁ、とりえあず関数が追加されたんだから使っときましょうか、というところです。
そりゃあ、PHP7まで関数を作ってない理由も分かる。キャストすればいいじゃんってなるから。
ちなみに、オープンでもらったリソース型変数はクローズしても値は変わりません。
リソースIDではオープン・クローズの区別はつかないところは注意しておきましょう。