编程

PHP 8.2: 新增 imap_is_open 函数

1059 2023-03-29 02:55:00

PHP 8.2.1 中,IMAP 扩展添加了一个名为 imap_is_open 的新函数,该函数返回给定的 IMAP\Connection 对象是否打开。

在此之前,没有办法判断 IMAP\Connection 对象是否打开。尝试使用已经关闭的对象会导致 \ValueError 异常,因此有了 imap_is_open 函数后,可以不用再通过 try/catch 检测给定的连接对象。

imap_is_open 只在 PHP 8.2.1 以上版本可用
注意 imap_is_open 函数是 PHP 8.2.1 新增的函数。该函数在 PHP 8.2.0 中不存在

imap_is_open 函数摘要

function imap_is_open(IMAP\Connection $imap): bool {}

imap_is_open 函数在全局命名空间中声明。 

用户空间的 PHP 实现

由于 imap_is_open 函数返回的是内部对象数据,因此无法在旧版本中复现该函数。不过,所有接收 IMAP\Connection 对象的 IMAP 函数都会抛出一个异常,因此借助于 imap_ping 函数在用户空间实现可能是次优方案。

if (!function_exists('imap_is_open')) {
  function imap_is_open(IMAP\Connection $imap): bool {
    try {
      imap_ping($imap);
      return true;
    }
    catch (\ValueError $exception) {
      return false;
    }
  }
}

向后兼容性影响

imap_is_open 是 IMAP 扩展在全局变量中声明的新函数。除非 PHP 应用在全局空间声明了同名函数,否则不会导致任何兼容性问题。

虽然不同,还是可以在旧版的 PHP 中仿制类似的功能。否则,捕获 \ValueError 异常是可行的跨版本兼容方法。