PHP函数参数与返回值类型
PHP从7开始逐步完善了类型系统。函数参数和返回值可以声明类型。今天说说各种类型声明的用法。
基本类型声明。
```php
declare(strict_types=1);
function process(int $id, string $name, float $price, bool $active): array
{
return compact('id', 'name', 'price', 'active');
}
print_r(process(1, '商品', 99.99, true));
?>
可空类型用?表示。
```php
function findUser(int $id): ?array
{
$users = [1 => ['name' => '张三']];
return $users[$id] ?? null;
}
$user = findUser(1);
echo $user['name'] . "\n";
$user = findUser(999);
var_dump($user);
?>
联合类型用|分隔。
```php
function formatValue(int|string|float $value): string
{
return match (true) {
is_int($value) => '整数: ' . number_format($value),
is_float($value) => '浮点数: ' . number_format($value, 2),
is_string($value) => '字符串: ' . $value,
};
}
echo formatValue(42) . "\n";
echo formatValue(3.14) . "\n";
echo formatValue("hello") . "\n";
?>
void类型表示没有返回值。
```php
function log(string $message): void
{
file_put_contents('/tmp/app.log', $message . "\n", FILE_APPEND);
}
log('用户登录');
?>
never类型表示函数不会返回。
```php
function abort(string $message): never
{
throw new RuntimeException($message);
}
function redirect(string $url): never
{
header("Location: $url");
exit;
}
?>
mixed类型表示任意类型。
```php
function debug(mixed $value): void
{
var_dump($value);
}
debug(42);
debug("hello");
debug([1, 2, 3]);
?>
iterable类型表示可遍历。
```php
function processItems(iterable $items): void
{
foreach ($items as $item) {
echo $item . "\n";
}
}
processItems([1, 2, 3]);
processItems(new ArrayIterator([4, 5, 6]));
?>
类型声明让函数的接口更清晰。调用者知道传什么参数、得到什么返回值。开启strict_types后,类型不匹配会直接报错,避免隐式转换导致的bug。
PHP函数参数与返回值类型
张小明
前端开发工程师
【MATLAB】工业多电机同步控制仿真与实现
【MATLAB】工业多电机同步控制仿真与实现 摘要:在传送带、数控机床、印刷纺织、机器人联动等工业场景中,多电机同步运行精度直接决定设备加工精度与生产线运行稳定性。单电机独立控制模式易受负载扰动、参数差异、机械摩擦影响,出现转速偏差、相位偏移、不同步抖动等问题,…
别再为调试Qt源码发愁了!Windows 10下Qt 5.13.2源码调试的两种保姆级方案(VS与MinGW)
Windows 10下Qt 5.13.2源码调试实战指南:VS与MinGW双方案解析调试Qt应用程序时遇到"无法进入Qt库内部"的困境,就像试图修理汽车却只能看到外壳而打不开引擎盖。本文将彻底解决这个痛点,带你掌握两种在Windows 10环境下调试Qt 5.13.…
Qt 5.13.2安装后,如何像高手一样调试Qt Creator源码?Windows 10环境下的深度配置与效率提升技巧
Qt 5.13.2源码调试实战:Windows 10下的高效开发配置指南当你第一次成功运行Qt Creator时,那种成就感就像解锁了新世界的大门。但很快你会发现,真正的力量隐藏在那些灰色不可点击的库函数背后——它们像黑匣子一样吞噬了你的断点,让…
NXP DPAA2 SerDes Lane复位操作:解决链路正常但数据不通的底层调试方法
1. 问题定位:当链路正常,但数据帧“消失”了在基于NXP DPAA2架构的嵌入式网络设备上做开发或维护,比如用LX2160做高端网关或交换机,最让人头疼的问题之一,就是“物理链路明明显示是UP的,但数据就是不通”。…
Google Earth Engine(GEE)——将逐日的影像数据转化为每周/月一期影像数据
本文目的是将原有逐日的数据按照周和月的时间来进行合成,然后生成新的影像集合,用于后续的操作,这里所利用的技术就是按照时间属性的差异来来设定指定的时间间隔,完成不同时间段影像的聚合,并将时间属性返回给以周或者月为单位的新的影像集合。 本文使用的数据集为: ER…
终极音乐解锁指南:如何快速解锁加密音乐文件
终极音乐解锁指南:如何快速解锁加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitcod…