PHP 8.2: 新增 imap_is_open 函数
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
异常是可行的跨版本兼容方法。