- PHP 教程
- PHP - 教程
- PHP - 简介
- PHP - 安装
- PHP - 历史
- PHP - 功能
- PHP - 语法
- PHP - Hello World
- PHP - 注释
- PHP - 变量
- PHP - echo 语句和 print 语句
- PHP - var_dump() 函数
- PHP - $ 和 $$ 变量
- PHP - 常量
- PHP - 魔术常量
- PHP – 数据类型
- PHP - 类型转换
- PHP - 类型戏法
- PHP - 字符串
- PHP - 布尔值
- PHP - 整数
- PHP - 文件和I/O
- PHP – 数学函数
- PHP - Heredoc & Nowdoc
- PHP - 复合类型
- PHP - 文件包含
- PHP - 日期和时间
- PHP - 标量类型声明
- PHP - 返回类型声明
- PHP 运算符
- PHP - 运算符类型
- PHP - 算术运算符示例
- PHP - 比较运算符示例
- PHP - 逻辑运算符示例
- PHP - 赋值运算符示例
- PHP – 字符串运算符
- PHP – 数组运算符
- PHP – 条件运算符示例
- PHP - Spread 运算符
- PHP - Null 合并运算符
- PHP - Spaceship 运算符
- PHP 控制语句
- PHP – 决策
- PHP - If…Else 语句
- PHP - Switch 语句
- PHP – 循环类型
- PHP - For 循环
- PHP - Foreach 循环
- PHP - While 循环
- PHP - do...While 循环
- PHP - Break 语句
- PHP - Continue 语句
- PHP 数组
PHP - 标量类型声明
提供类型提示的功能从 PHP 版本 5 开始就已经存在。类型提示是指在函数定义中提供参数数据类型的做法。在 PHP 7 之前,函数中可以只使用 array、callable 和 class 来表示类型提示。
从 PHP 7 开始,您还可以为标量数据类型的参数(如 int、string、bool 等)插入类型提示。
PHP 是一种动态(且弱)类型的语言。因此,在定义函数时,您不需要声明参数的类型,这在 C 或 Java 等静态类型语言中是必需的。
PHP 中函数的典型定义如下 -
function addition($x, $y) {
echo "First number: $x Second number: $y Addition: " . $x+$y;
}
这里,我们假设参数 $x 和 $y 是数值。但是,即使传递给函数的值不是数字,PHP 解析器也会尝试尽可能将变量转换为兼容的类型。
如果传递的值之一是一个数字的字符串表示,而另一个是数字变量,PHP 会将字符串变量强制转换为 numeric 以执行加法运算。
例看看下面的例子 -
<?php
function addition($x, $y) {
echo "First number: " . $x;
echo "\nSecond number: " . $y;
echo "\nAddition: " . $x+$y;
}
$x="10";
$y=20;
addition($x, $y);
?>
它将产生以下输出 -
Second number: 20
Addition: 30
但是,如果上例中的 $x 是不包含有效数字表示形式的字符串,则会遇到错误。
<?php
function addition($x, $y) {
echo "First number: " . $x;
echo "\nSecond number: " . $y;
echo "\nAddition: " . $x+$y;
}
$x="Hello";
$y=20;
addition($x, $y);
?>
运行此代码并查看它如何显示错误。
PHP 7 标量类型声明
PHP 版本 7 中引入的新功能允许使用参数定义函数,其数据类型可以在括号内指定。
PHP 7 引入了以下标量类型声明 -
- Int
- Float
- Bool
- String
- Interfaces
- Array
- Callable
旧版本的 PHP 只允许将 array、callable 和 class 类型用作类型提示。此外,在旧版本的 PHP (PHP 5) 中,致命错误曾经是可恢复的错误,而新版本 (PHP 7) 返回可抛出的错误。
标量类型声明以两种模式实现 -
- 强制模式 − 强制是默认模式,无需指定。
- 严格模式 - 必须明确提示严格模式。
强制模式
现在,可以通过合并类型声明来重写前面示例中定义的 addition() 函数,如下所示 -
function addition(int $x, int $y) {
echo "First number: $x Second number: $y Addition: " . $x+$y;
}
请注意,解析器仍然会将不兼容的类型(即 string)转换为 int(如果字符串如前所述包含整数)。
例子
看看下面的例子 -
<?php
function addition(int $x, int $y) {
echo "First number: " . $x;
echo "\nSecond number: " . $y;
echo "\nAddition: " . $x+$y;
}
$x="10";
$y=20;
echo addition($x, $y);
?>
它将产生以下输出 -
Second number: 20
Addition: 30
显然,这是因为 PHP 是一种弱类型语言,因为 PHP 试图将字符串类型的变量强制转换为整数。PHP 7 引入了一个严格模式功能来解决这个问题。
严格模式
为了应对 PHP 的弱类型检查,引入了 strict 模式。此模式通过 declare 语句启用 -
declare (strict_types=1);
您应该将此语句放在 PHP 脚本的顶部(通常就在 PHP 标签的下方)。这意味着标量键入的严格性是按文件配置的。
在弱模式下,strict_types标志为 0。将其设置为 1 会强制 PHP 解析器检查传递的参数和值的兼容性。在上面的代码中添加这个语句并检查结果。它将显示以下错误消息 -
Fatal error: Uncaught TypeError: addition():
Argument #1 ($x) must be of type int, string given,
called in add.php on line 12 and defined in add.php:4
Stack trace:
#0 add.php(12): addition('10', 20)
#1 {main}
thrown in add.php on line 4
例子
这是函数定义中标量类型声明的另一个示例。如果不兼容的类型作为参数传递,则启用严格模式时会引发致命错误。
<?php
// 严格模式
// 声明 (strict_types = 1);
function sum(int ...$ints) {
return array_sum($ints);
}
print(sum(2, '3', 4.1));
?>
取消注释此代码顶部的 declare 语句并运行它。现在它会产生一个错误 -
sum(): Argument #2 must be of type int, string given,
called in add.php on line 9 and defined in add.php:4
Stack trace:
#0 add.php(9): sum(2, '3', 4.1)
#1 {main}
thrown in add.php on line 4
类型提示功能主要由 IDE 用于提示用户函数声明中使用的参数的预期类型。以下屏幕截图显示了在您键入时弹出函数原型的 VS Code 编辑器。