4

我正在寻找一种使用 PHP 获取给定对象/资源的实例 ID 的方法,就像 var_dump() 一样:

var_dump(curl_init()); // resource #1 of type curl
var_dump(curl_init()); // resource #2 of type curl

如何在不调用 var_dump() 的情况下获取实例计数?是否可以?

4

6 回答 6

6

将其转换为 int 以获取资源 ID:

$resource= curl_init();
var_dump($resource);
var_dump(intval($resource));
于 2009-12-05T22:24:57.933 回答
4

PHP 8.0 之前:

(int) curl_init();

PHP 8.0+:

spl_object_id(curl_init());

跨版本:

$handle = curl_init();
is_object($handle) ? spl_object_id($hadle) : (int) $handle;
// unset($handle);
于 2009-12-05T22:23:56.610 回答
3

这是一个非常有趣的问题......我很想看看你会用它来做什么......但这是一种方法......

$ch = curl_init();
preg_match("#\d+#", (string) $ch, $matches);
$resourceIdOne = end($matches);

$ch2 = curl_init();
preg_match("#\d+#", (string) $ch2, $matches);
$resourceIdTwo = end($matches);

比较:https ://stackoverflow.com/a/68303184/367456

于 2009-12-05T22:19:44.200 回答
1

将资源转换为 idsprintf()

$resource = curl_init();
$id = sprintf('%x', $resource);

// mimic var_dump();
$type = get_resource_type($resource);
echo "resource({$id}) of type ({$type})\n";
于 2019-04-19T22:11:51.143 回答
1

在 PHP8 中,许多函数现在返回一个类实例而不是资源:

$resource = curl_init();
$id = PHP_MAJOR_VERSION >= 8 ? spl_object_id(resource) : (int)resource;

或者

$id = is_resource($resource) ? (int)resource : spl_object_id(resource); 
于 2021-07-08T14:04:51.097 回答
0
function get_resource_id($resource) {
    if (!is_resource($resource))
        return false;

    return array_pop(explode('#', (string)$resource));
}
于 2012-12-27T21:40:47.733 回答