标量类型声明

默认情况下,所有的PHP文件都处于弱类型校验模式,PHP7增加了标量类型声明的特性:
①强制模式(默认)②严格模式

declare(strict_type = 1) // 严格类型校验模式 declare(strict_type = 0) // 弱类型校验模式

可以使用的类型参数

  • int
  • float
  • bool
  • string
  • interfaces
  • array
  • callable

    强制模式

    • 强制模式是默认的,不如称之为弱类型校验模式。
  1. <?php
  2. // 强制模式
  3. function sum_1(int ...$ints)
  4. {
  5. return array_sum($ints);
  6. }
  7. print_r(sum_1(2, '3', 4.1)); // 9

严格模式

  • 启用严格模式,declare语句应该写在第一行
  • 下面的调用会报错,必须都是 int型,才可以通过。
  1. <?php
  2. // 严格模式
  3. declare(strict_types=1);
  4. function sum_2(int ...$ints)
  5. {
  6. return array_sum($ints);
  7. }
  8. print(sum_2(2, '3', 4.1));

返回类型声明

PHP7增加了对返回类型声明的支持,可以声明的返回类型有

  • int
  • float
  • bool
  • string
  • interfaces
  • array
  • callable

返回类型要求实例

  1. <?php
  2. declare(strict_types=1);
  3. function sum(int ...$ints): int
  4. {
  5. return array_sum($ints);
  6. }
  7. print_r(sum(1, 2, 3)); // 6

void 函数

这是一个新的返回值类型,返回值声明为void,要么干脆省去 return 语句,要么 return; 记住此时 return NULL也是错误的。

例-1:通过第三方变量交换两个变量的值

  1. <?php
  2. function swap(&$a, &$b): void // 这里是是要在方法内部操作,所以直接取内存地址
  3. {
  4. if ($a === $b) {
  5. return; // 这里的return 仅仅用于结束方法
  6. }
  7. $tmp = $a;
  8. $a = $b;
  9. $b = $tmp;
  10. }
  11. $a = 1;
  12. $b = 2;
  13. swap($a, $b);
  14. print 'a = ' . $a . '<br>';
  15. print 'b = ' . $b . '<br>';

例-2:通过^运算运算

  1. <?php
  2. declare(strict_types=1);
  3. // 当然,如果是用于整数的值交换。我们可以优化一下
  4. function swap(int &$a, int &$b): void
  5. {
  6. if ($a === $b) {
  7. return; // 这里的return 仅仅用于结束方法
  8. }
  9. $a = $a ^ $b;
  10. $b = $a ^ $b;
  11. $a = $a ^ $b;
  12. }

例-2:通过算数加减运算

  1. <?php
  2. declare(strict_types=1);
  3. function swap(&$x, &$y):void
  4. {
  5. if ($x === $y) {
  6. return; // 这里的return 仅仅用于结束方法
  7. }
  8. $x = $x + $y;
  9. $y = $x - $y;
  10. $x = $x - $y;
  11. }