目录
1.类型声明
类型声明可以用于函数的参数、返回值、类的属性,如果预期类型在调用时不匹配,则会抛出一个 TypeError 异常。
类型 | 说明 |
---|---|
bool | 值必须为一个布尔值。 |
int | 值必须为一个整型数字。 |
float | 值必须为一个浮点数字。 |
string | 值必须为一个 string。 |
array | 值必须为 array。 |
iterable | 值必须为 array 或 Traversable 接口的实例。 |
callable | 值必须是一个有效的 callable。 不能用于类属性的类型声明。 |
object | 值必须为 object。 |
Class/Interface | 值必须为给定类或接口的实例。 |
self | 值必须是用于类型声明的同一个类的实例。 只能在类的内部使用。 |
parent | 值必须是用于类型声明的类的父类的实例。只能在类的内部使用。 |
mixed | 值可以为任何类型。 |
2.问号?类型
类型声明前置一个问号 (?) 用来声明这个值允许为指定类型,或者为 null。
?类型
3.联合(Union)类型
联合类型接受多个不同的类型做为参数。
T1|T2|...
4.mixed类型
mixed类型为PHP支持的任意类型,等同于 :
//联合(union)类型
object|resource|array|string|float|int|bool|null
5.交集(Intersection)类型
当一个值需要同时满足多个类型约束时,使用交集类型。
类型1 & 类型2
6.void返回类型
void 是一个返回类型,用于标识函数没有返回值。
void
7.Never返回类型
never 是一种表示没有返回的返回类型。使用 never 类型声明的函数或方法表示它不会返回值,并且会抛出异常或通过调用 die()、exit()、trigger_error() 或类似的东西来结束脚本的执行。
//PHP 8.1
function redirect(string $uri): never {
header('Location: ' . $uri);
exit();
}
function redirectToLoginPage(): never {
redirect('/login');
echo 'Hello'; // <- dead code detected by static analysis
}
8.严格(Strict)类型模式
可以按文件开启严格类型模式,在开启严格类型模式下,只能接受完全匹配的类型,否则会抛出 TypeError。 唯一的例外是 int 值也可以传入声明为 float 的类型。只有为标量类型的声明开启严格类型。
要开启严格模式,使用 declare
开启 strict_types
:
<?php
declare(strict_types=1);
function sum(int $a, int $b) {
return $a + $b;
}
var_dump(sum(1, 2));
var_dump(sum(1.5, 2.5));
?>
//输出
int(3)
Fatal error: Uncaught TypeError: sum(): Argument #1 ($a) must be of type int, float given, called in - on line 9 and defined in -:4
Stack trace:
#0 -(9): sum(1.5, 2.5)
#1 {main}
thrown in - on line 4
9.类型转换
PHP 中的类型强制转换和 C 中的非常像:在要转换的变量之前加上用括号括起来的目标类型。
<?php
// $foo is an integer
$foo = 10;
// $bar is a boolean
$bar = (boolean) $foo;
?>
允许的强制转换有:
- (bool), (boolean) – 转换为布尔类型 bool
- (int), (integer) – 转换为整型 int
- (float), (double), (real) – 转换为浮点型 float
- (string) – 转换为字符串 string
- (array) – 转换为数组 array
- (object) – 转换为对象 object
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/php/phplang/10495.html