ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

PHP8, get_resource_id, リソースIDを取得する関数。これ作った意味ある?

php
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

リソース型はいわゆるファイルなどのディスクリプタのことで、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ではオープン・クローズの区別はつかないところは注意しておきましょう。

前の投稿
PHP8, get_debug_type, 変数の型を文字列で返す関数。よりデバッグしやすい表示。
PHP8, DOM生成クラスに新しいインタフェース追加。ノードクラスの再構成。
次の投稿
コメントを残す

*