0

0

php函数参数类型声明怎么用_php函数参数类型限定【语法】

蓮花仙者

蓮花仙者

发布时间:2026-02-26 17:24:56

|

503人浏览过

|

来源于php中文网

原创

php函数参数类型声明必须写在参数名前,如function foo(type $param);strict_types=1须为文件首行非空非注释语句;可空类型用?string而非string|null;void仅作返回类型且禁止return值;联合类型中null须用?语法。

php函数参数类型声明怎么用_php函数参数类型限定【语法】

PHP 函数参数类型声明必须写在参数名前面

PHP 7.0+ 支持在函数定义中直接声明参数类型,语法是 function foo(Type $param),不是 function foo($param: Type)(那是 TypeScript 风格,PHP 不认)。漏掉类型或位置写错,会直接报 ParseError

  • 标量类型(stringintfloatbool)默认开启严格模式才强制校验;否则 PHP 会尝试自动转换(比如把 "123" 转成 int
  • 类名、接口名、arraycallableiterableobject 这些类型,无论是否启用严格模式,只要传错就立刻抛 TypeError
  • 如果想允许 null,得显式写成 ?stringstring|null(PHP 8.0+ 推荐前者),光写 string 就不接受 null

strict_types=1 必须放在文件顶部第一行

启用严格类型检查不是靠函数里写类型就能生效的——它依赖 declare(strict_types=1);,而且这行必须是 PHP 文件中**第一个非空白、非注释的语句**。放第二行、被 BOM 或空格顶到前面,都会让声明失效,变成松散类型行为。

  • 这个声明只对当前文件有效,不会影响 includerequire 的其他文件
  • 没加这行时,int $x = "42" 会静默转成 42;加了之后,直接报 TypeError
  • 常见坑:用 IDE 自动生成文件头(比如版权注释)时,不小心把 declare 挤到了第二行,结果调试半天发现类型没生效

void 返回类型不能有 return 值,但可以 return;

void 表示函数不返回任何值,连 null 都不算合法返回。写成 function foo(): void { return null; } 会触发 Fatal error

Emergent Drums
Emergent Drums

使用Emergent Drums生成独特的鼓样本,全部免版税。

下载
  • 正确写法只有两种:return;(显式退出)或直接结束函数体(隐式返回)
  • void 不能作为参数类型,也不能出现在联合类型里(比如 void|string 是语法错误)
  • 注意和没有声明返回类型的函数区别:没声明时,函数可以返回任意值;声明了 void,就彻底禁止返回任何表达式

联合类型(PHP 8.0+)里 null 要用 ? 写法,别混用 | null

PHP 8.0 引入联合类型,比如 string|int,但 null 是个特例:必须用可空语法 ?string,不能写成 string|null(虽然解析器能认,但会触发 Deprecated 警告,PHP 9 会彻底禁用)。

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

  • ?string 等价于 string|null,但前者是官方推荐写法,且更清晰表达“可空”语义
  • 联合类型中不能出现 voidmixed(PHP 8.0 中 mixed 是保留字,不能用于联合类型)
  • 如果函数可能返回多个类型又含 null,比如字符串或整数或空,得写成 string|int|null?不对——要写成 ?string|int?也不对。正确是 string|int 加上函数内允许返回 null 的逻辑,再配合 ?string|int 不合法;实际应选 string|int|NULL 并确保启用了 strict_types=1,但更稳妥是改用 mixed 或封装为返回数组
类型声明看着简单,真正落地时最常卡在 declare(strict_types=1) 的位置、可空语法的写法、以及联合类型中 null 的处理方式上。这几个点不手动验证一遍,很容易以为“写了类型就生效了”。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

40

2026.02.13

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

35

2026.02.25

string转int
string转int

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

850

2023.08.02

css中float用法
css中float用法

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

592

2024.04.28

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

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

105

2025.10.23

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

require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

504

2023.11.27

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号