标量类型声明
默认情况下,所有的PHP文件都处于弱类型校验模式,PHP7增加了标量类型声明的特性:
①强制模式(默认)②严格模式
declare(strict_type = 1) // 严格类型校验模式 declare(strict_type = 0) // 弱类型校验模式
可以使用的类型参数
<?php// 强制模式function sum_1(int ...$ints){return array_sum($ints);}print_r(sum_1(2, '3', 4.1)); // 9
严格模式
- 启用严格模式,declare语句应该写在第一行
- 下面的调用会报错,必须都是 int型,才可以通过。
<?php// 严格模式declare(strict_types=1);function sum_2(int ...$ints){return array_sum($ints);}print(sum_2(2, '3', 4.1));
返回类型声明
PHP7增加了对返回类型声明的支持,可以声明的返回类型有
- int
- float
- bool
- string
- interfaces
- array
- callable
返回类型要求实例
<?phpdeclare(strict_types=1);function sum(int ...$ints): int{return array_sum($ints);}print_r(sum(1, 2, 3)); // 6
void 函数
这是一个新的返回值类型,返回值声明为void,要么干脆省去 return 语句,要么 return; 记住此时 return NULL也是错误的。
例-1:通过第三方变量交换两个变量的值
<?phpfunction swap(&$a, &$b): void // 这里是是要在方法内部操作,所以直接取内存地址{if ($a === $b) {return; // 这里的return 仅仅用于结束方法}$tmp = $a;$a = $b;$b = $tmp;}$a = 1;$b = 2;swap($a, $b);print 'a = ' . $a . '<br>';print 'b = ' . $b . '<br>';
例-2:通过^运算运算
<?phpdeclare(strict_types=1);// 当然,如果是用于整数的值交换。我们可以优化一下function swap(int &$a, int &$b): void{if ($a === $b) {return; // 这里的return 仅仅用于结束方法}$a = $a ^ $b;$b = $a ^ $b;$a = $a ^ $b;}
例-2:通过算数加减运算
<?phpdeclare(strict_types=1);function swap(&$x, &$y):void{if ($x === $y) {return; // 这里的return 仅仅用于结束方法}$x = $x + $y;$y = $x - $y;$x = $x - $y;}
