讲师中心 微信公众号
AI工具推荐 视频效率加速

PHP变量类型有哪些_PHP变量支持的数据类型【汇总】

夏宇酱_5551

夏宇酱_5551

发布时间:2026-02-26 23:11:02

|

969人浏览过

|

来源于php中文网

原创

PHP变量类型动态决定于运行时值而非声明,$var本身无类型;8种内置类型含标量、复合及特殊类型,strict_types仅约束函数参数与返回值,资源与对象序列化行为迥异。

php变量类型有哪些_php变量支持的数据类型【汇总】

PHP变量类型不是固定声明的,而是运行时动态决定的

PHP里没有“定义变量类型”这回事,$var 本身不带类型,类型属于它当前存储的值。你赋一个整数,$var 就是 int;改成字符串,立刻变成 string;塞个数组进去,就是 array。这种动态性是PHP底层实现决定的,不是语法糖或者可选项。

常见错误现象:gettype($var) 返回 "integer",但稍后 $var = "123",再调用就变 "string";有人误以为 declare(strict_types=1) 能约束变量类型——它只影响函数参数和返回值的类型声明,对普通变量完全无效。

  • 所有变量都以 $ 开头,无需提前声明类型
  • var_dump() 是最靠谱的类型+值查看方式,比 gettype() 多一层结构信息
  • 类型转换靠强制转换(如 (int)$val)或函数(如 intval()),但要注意隐式转换陷阱,比如 "123abc" + 1 得到 124,因为字符串被截断转成数字

8种内置标量与复合类型,其中 NULL 和 resource 最容易误判

PHP官方文档列了8种类型:4个标量(bool、int、float、string)、2个复合(array、object)、1个特殊(NULL)、1个资源(resource)。注意 callable 和 iterable 是伪类型,只用于类型声明,不能用 gettype() 检测出来。

容易踩的坑:NULL 不等于空字符串、0 或 false,但 empty() 和 == 会把它们混为一谈;resource 类型(比如 fopen() 返回值)在 PHP 8.1 后已标记为废弃,且无法用 json_encode() 序列化,直接打印只显示 Resource id #n,必须用对应函数(如 get_resource_type())识别。

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

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载
  • bool 只有 true 和 false 两个值,注意 0、""、[]、null 在松散比较中都算 “falsy”,但它们类型完全不同
  • float 实际是双精度浮点数(IEEE 754),0.1 + 0.2 !== 0.3 是常态,金融计算务必用 bcadd() 或 gmp
  • array 是有序映射表,既是索引数组也是关联数组,count() 对空对象返回 0,但对象不是 array

对象和资源类型的行为差异极大,尤其在生命周期和序列化上

object 类型由类实例化而来,自带属性、方法和作用域规则;resource 是外部资源(文件句柄、数据库连接等)的抽象指针,没有方法,也不能直接访问内部数据。两者都不能直接 json_encode(),但原因不同:对象默认只序列化 public 属性,而 resource 根本没有可序列化的结构。

典型问题:fclose() 后继续使用该 resource 变量,gettype() 仍返回 "resource",但后续操作会报 Warning: fwrite(): supplied resource is not a valid stream resource;对象在 unset 后变成 null,但资源关闭后变量依然存在,只是失效了。

  • 判断资源是否有效,用 is_resource($res) && get_resource_type($res) === 'stream',不能只靠 is_resource()
  • 对象要自定义序列化行为,需实现 __serialize() 和 __unserialize()(PHP 7.4+),否则 serialize() 只存 public 属性
  • 资源类型无法 clone,也无法用 === 比较是否指向同一底层资源,只能靠业务逻辑保证生命周期

PHP 8 的 mixed 和 never 是类型声明关键词,不影响运行时变量类型

mixed 表示“可以是任意类型”,never 表示“这个函数不会正常返回”,它们只在函数签名、属性声明或 PHPDoc 中起作用,运行时 gettype() 完全看不到它们。有人在 PHP 8 下写 function foo(): mixed { return new stdClass(); },然后期待 gettype(foo()) 返回 "mixed"——这是不可能的,实际还是 "object"。

兼容性提醒:PHP 7.4 引入了 object 类型声明(表示任意对象),但它不等于 stdClass,也不限制具体类名;而 mixed 在 PHP 8.0 才正式支持,低版本用会报错,不能当运行时类型检测依据。

  • 类型声明只校验传参和返回,不影响变量本身的动态性
  • var_export() 输出的是可执行的 PHP 代码,能反映当前值类型;print_r() 更适合调试,但对资源只输出占位符
  • 真正需要类型安全的场景,别依赖运行时判断,用严格类型声明 + 静态分析工具(如 PHPStan)更可靠

类型系统在 PHP 里始终是“声明层”和“运行层”两套逻辑并存,混淆这两者是绝大多数类型相关 bug 的根源。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2891

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

534

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

502

2026.02.12

string转int
string转int

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

6239

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

6427

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

744

2025.10.23

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

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

549

2023.09.22

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

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

1678

2024.03.01

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

0

2026.10.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn