PHP 7在标量类型声明和返回类型声明中使用两种类型的提示-
弱类型提示
严格的类型提示
默认情况下,PHP 7在弱类型检查中起作用,类型检查mode.Weak不会给出任何错误或致命error.When的类型声明不匹配,它只会执行代码而不会引发任何错误。
通过使用strict_typesdeclare(),我们可以控制弱类型检查。
declare(strict_types=0); //weak type-checking; we should set the strict value = 0
<?php $x=10; // integer variable x =10 value $y=20.20; // using floating point number y=20.20 value function add(int $x, int $y){ return $x + $y; } echo add($x, $y); ?>输出结果
该代码将产生以下输出-
30
在上面的示例中,我们没有对参数使用严格的值。我们使用了两个整数变量x和y。对于x = 10,y使用浮点数20.20,但是y不会产生任何错误;它只会给出输出整数值30。
<?php function returnadd(int ...$integers){ return array_sum($integers); } var_dump(returnadd(2, '3', 4.1)); ?>输出结果
上面程序的输出将是-
int(9)
当类型声明不匹配时,严格的类型提示将给出致命错误。我们可以说严格类型提示接受类型声明的确切类型的变量,否则它将引发TypeError不匹配。
在严格类型提示中,必须声明文件中的第一条语句(strict_types = 1),否则将产生编译器错误。它不会影响文件中未指定的其他包含文件,这意味着它只会影响所使用的特定文件。
严格类型提示指令是完全编译时的,不能在运行时进行控制。
<?php declare (strict_types=1); function returnadd(float $x , float $y){ return $x+$y; } var_dump(returnadd(3.1,2.1)); //output float(5.2) var_dump(returnadd(3, "2 days")); //fatal error ?>输出结果
上面的严格类型提示程序将是-
float(5.2) Fatal error: Uncaught TypeError: Argument 2 passed to returnadd() must be of the type float, string given, called in C:\xampp\htdocs\gud.php on line 7 and defined in C:\xampp\htdocs\gud.php:3 Stack trace: #0 C:\xampp\htdocs\gud.php(7): returnadd(3, '2 days') #1 {main} thrown in C:\xampp\htdocs\gud.php on line 3
<?php declare(strict_types=1); // strict mode checking $x='1'; // string $y=20; //integer number function add(int $x, int $y){ return $x + $y; } var_dump(add($x, $y)); ?>
它将产生输出“致命错误”
在上面的严格类型声明示例中,如果我们声明strict_type值为1,则代码将给出输出“致命错误:Uncaught TypeError:传递给参数1add()的类型必须为int,给出字符串”。