0

0

PHP如何检查变量是否为资源类型_PHP检查资源类型变量方式【方式】

絕刀狂花

絕刀狂花

发布时间:2026-02-26 19:34:38

|

674人浏览过

|

来源于php中文网

原创

判断变量是否为资源类型唯一可靠方式是is_resource(),它只校验资源索引是否存在资源表中,对已关闭资源仍返回true;需结合具体函数(如mysqli_ping、feof)或异常捕获确认有效性。

php如何检查变量是否为资源类型_php检查资源类型变量方式【方式】

is_resource() 判断变量是否为资源

PHP 中判断一个变量是不是资源类型,唯一可靠、语义明确的方式就是用 is_resource()。它专为此设计,返回布尔值,不依赖类型转换或字符串匹配。

常见错误是拿 gettype($var) === 'resource'get_resource_type($var) 来判断——前者在 PHP 8+ 对已关闭资源会返回 'unknown',后者在变量根本不是资源时直接报 Warning: get_resource_type(): supplied argument is not a valid resource

  • is_resource() 对已关闭的资源(如 fclose() 后)仍返回 true,这是它的行为特征,不是 bug
  • 若需同时确认资源“有效且未关闭”,得配合具体函数检查,比如文件资源用 feof() + fstat() 或尝试读写
  • 该函数性能开销极低,可放心用于高频逻辑中

资源变量被关闭后 is_resource() 仍为 true 的原因

PHP 的资源类型本质是内部指针索引,is_resource() 只校验这个索引是否还存在于资源表中,不检查底层句柄是否有效。所以 fclose($fp) 后,$fp 还是资源类型,只是内容不可用。

这导致很多实际问题:比如把已关闭的 mysqli 连接传给 mysqli_query(),会报 mysqli_query(): Couldn't fetch mysqli;或者对已释放的 cURL 句柄调 curl_exec(),返回 false 且无明确提示。

造次
造次

Liblib打造的AI原创IP视频创作社区

下载

立即学习PHP免费学习笔记(深入)”;

  • 不要仅靠 is_resource() 做业务逻辑分支,尤其涉及 I/O 操作前
  • 对数据库连接,优先用 mysqli_ping()pg_connection_status()
  • 对文件句柄,可用 stream_get_meta_data($fp)['eof'] 辅助判断状态,但最稳妥仍是捕获操作异常

替代方案为什么不可靠:比如 gettype()instanceof

gettype() 返回字符串,看似直观,但它在资源关闭后可能返回 'unknown'(PHP 8.0+),也可能返回 'resource (closed)'(某些 SAPI 下),行为不一致;而 instanceof 完全无效——资源不是对象,没有类名,写 $var instanceof stdClass 会直接报错或恒为 false

  • is_scalar()is_object()is_array() 都无法覆盖资源类型判断场景
  • 有人用 !is_null($var) && !is_bool($var) && ... 排除法,既难维护又漏边界(比如 NULLFALSE 都可能来自资源操作失败)
  • 硬编码类型字符串(如 strpos((string)$var, 'Resource id') !== false)在不同 PHP 版本和输出环境下极易失效

实际使用中容易忽略的典型场景

资源变量常来自函数返回,但并非所有“看起来像资源”的返回值都真是资源——比如 fopen() 失败时返回 falsemysql_connect()(已废弃)失败也返回 false,而 curl_init() 总是返回资源(即使后续 curl_setopt() 配置出错)。

  • 必须在调用资源创建函数后立刻检查返回值:$fp = fopen('file.txt', 'r'); if ($fp === false) { /* handle error */ }
  • mysqli_connect() 成功返回对象,失败才返回 false,它不属于资源类型,不能用 is_resource()
  • 扩展模块(如 gdopenssl)返回的资源,命名和生命周期规则各异,但 is_resource() 判断逻辑统一有效

资源类型本身不透明,PHP 不提供通用的“验证有效性”函数,能做的只有两步:先用 is_resource() 确认类型,再根据具体资源种类调对应的状态检查函数或捕获操作异常。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

850

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

248

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

906

2024.03.01

resource是什么文件
resource是什么文件

Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

172

2023.12.20

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

831

2023.08.22

fclose函数的用法
fclose函数的用法

fclose是一个C语言和C++中的标准库函数,用于关闭一个已经打开的文件,是文件操作中非常重要的一个函数,用于将文件流与底层文件系统分离,释放相关的资源。更多关于fclose函数的相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

342

2023.11.30

fclose函数的用法
fclose函数的用法

fclose是一个C语言和C++中的标准库函数,用于关闭一个已经打开的文件,是文件操作中非常重要的一个函数,用于将文件流与底层文件系统分离,释放相关的资源。更多关于fclose函数的相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

342

2023.11.30

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

452

2023.06.14

Golang 实际项目案例:从需求到上线
Golang 实际项目案例:从需求到上线

《Golang 实际项目案例:从需求到上线》以真实业务场景为主线,完整覆盖需求分析、架构设计、模块拆分、编码实现、性能优化与部署上线全过程,强调工程规范与实践决策,帮助开发者打通从技术实现到系统交付的关键路径,提升独立完成 Go 项目的综合能力。

1

2026.02.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 12.5万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号