标量类型声明
默认情况下,所有的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
返回类型要求实例
<?php
declare(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:通过第三方变量交换两个变量的值
<?php
function 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:通过^运算运算
<?php
declare(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:通过算数加减运算
<?php
declare(strict_types=1);
function swap(&$x, &$y):void
{
if ($x === $y) {
return; // 这里的return 仅仅用于结束方法
}
$x = $x + $y;
$y = $x - $y;
$x = $x - $y;
}