【问题标题】:How to get instance ID with PHP如何使用 PHP 获取实例 ID
【发布时间】:2010-12-23 15:24:40
【问题描述】:

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

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

如何在不调用 var_dump() 的情况下获取实例计数?有可能吗?

【问题讨论】:

  • 有什么用?这没什么意义。

标签: php resources object instance var-dump


【解决方案1】:

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

$resource= curl_init();
var_dump($resource);
var_dump(intval($resource));

【讨论】:

  • 他提到没有使用var_dump ;)
  • 这么简单...谢谢 pygorex1!
  • 这其实是一个很好的解决方案。你也可以只做 (int) $resource
  • 或者,等效地:(int)$resource。但是手册说从技术上讲这种转换是未定义的。
  • 你没有针对stackoverflow.com/questions/2872366/… 的解决方案,不是吗? :)
【解决方案2】:

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);

【讨论】:

  • 因为我最初认为您确实需要获取确切的字符串“Y 类型的资源(x)” - 但在我再次阅读您的问题后,我认为您真的只想要整数值而没有混乱; -)
  • php8中curl_init()不再返回资源,而是返回CurlHandle的实例
【解决方案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

【讨论】:

  • 我不会将它用于任何不正常的事情,我正在考虑替换 var_dump() 以获得更多信息/可读性的功能,但我想它可以用于聪明的注册表模式也是。
【解决方案4】:

使用sprintf()将资源转换为id

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

// mimic var_dump();
$type = get_resource_type($resource);
echo "resource({$id}) of type ({$type})\n";

【讨论】:

    【解决方案5】:

    在 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); 
    

    【讨论】:

      【解决方案6】:
      function get_resource_id($resource) {
          if (!is_resource($resource))
              return false;
      
          return array_pop(explode('#', (string)$resource));
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-12
        • 2019-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-09
        相关资源
        最近更新 更多