插件窝 干货文章 php7和php5语法有什么区别

php7和php5语法有什么区别

PHP 类型 数组 支持 327    来源:    2025-03-18

PHP 7 和 PHP 5 在语法上有一些显著的区别和改进。以下是一些主要的区别:

1. 标量类型声明

  • PHP 7 引入了标量类型声明(Scalar Type Declarations),允许在函数参数和返回值中指定标量类型(如 int, float, string, bool)。
  • PHP 5 不支持标量类型声明,只能使用数组、对象、回调函数等类型声明。

    // PHP 7
    function add(int $a, int $b): int {
       return $a + $b;
    }
    

2. 返回类型声明

  • PHP 7 支持返回类型声明,可以在函数定义时指定返回值的类型。
  • PHP 5 不支持返回类型声明。

    // PHP 7
    function getSum(int $a, int $b): int {
       return $a + $b;
    }
    

3. 空合并运算符 (??)

  • PHP 7 引入了空合并运算符 (??),用于简化检查变量是否存在且不为 null 的操作。
  • PHP 5 不支持空合并运算符。

    // PHP 7
    $username = $_GET['username'] ?? 'guest';
    

4. 太空船运算符 (<=>)

  • PHP 7 引入了太空船运算符 (<=>),用于比较两个表达式的大小,返回 -1, 0, 或 1
  • PHP 5 不支持太空船运算符。

    // PHP 7
    echo 1 <=> 1; // 0
    echo 1 <=> 2; // -1
    echo 2 <=> 1; // 1
    

5. 常量数组

  • PHP 7 允许使用 define() 定义常量数组。
  • PHP 5 不支持常量数组。

    // PHP 7
    define('ANIMALS', ['dog', 'cat', 'bird']);
    

6. 匿名类

  • PHP 7 支持匿名类,可以在需要时动态创建类实例。
  • PHP 5 不支持匿名类。

    // PHP 7
    $obj = new class {
       public function sayHello() {
           echo "Hello!";
       }
    };
    $obj->sayHello();
    

7. Unicode 转义语法

  • PHP 7 支持 Unicode 转义语法,可以在字符串中使用 \u{xxxx} 来表示 Unicode 字符。
  • PHP 5 不支持 Unicode 转义语法。

    // PHP 7
    echo "\u{1F60A}"; // 输出笑脸表情
    

8. declare(strict_types=1)

  • PHP 7 引入了严格类型模式,可以在文件顶部使用 declare(strict_types=1) 来启用严格类型检查。
  • PHP 5 不支持严格类型模式。

    // PHP 7
    declare(strict_types=1);
    
    function add(int $a, int $b): int {
       return $a + $b;
    }
    

9. Throwable 接口

  • PHP 7 引入了 Throwable 接口,ExceptionError 都实现了这个接口,使得错误处理更加一致。
  • PHP 5 中,Error 不是 Exception 的子类。

    // PHP 7
    try {
       // some code that may throw an exception or error
    } catch (Throwable $e) {
       echo $e->getMessage();
    }
    

10. intdiv() 函数

  • PHP 7 引入了 intdiv() 函数,用于执行整数除法。
  • PHP 5 不支持 intdiv() 函数。

    // PHP 7
    echo intdiv(10, 3); // 3
    

11. Closure::call() 方法

  • PHP 7 引入了 Closure::call() 方法,允许临时绑定闭包到对象并调用它。
  • PHP 5 不支持 Closure::call() 方法。

    // PHP 7
    $closure = function() { return $this->value; };
    $result = $closure->call(new class { public $value = 42; });
    echo $result; // 42
    

12. Generatorreturn 表达式

  • PHP 7 允许在生成器函数中使用 return 表达式来返回值。
  • PHP 5 不支持生成器函数中的 return 表达式。

    // PHP 7
    function gen() {
       yield 1;
       yield 2;
       return 3;
    }
    
    $gen = gen();
    foreach ($gen as $val) {
       echo $val; // 1, 2
    }
    echo $gen->getReturn(); // 3
    

13. list() 的改进

  • PHP 7 允许在 list() 中使用数组的键。
  • PHP 5list() 只能使用索引数组。

    // PHP 7
    $data = ['a' => 1, 'b' => 2];
    list('a' => $a, 'b' => $b) = $data;
    echo $a; // 1
    echo $b; // 2
    

14. session_start() 的改进

  • PHP 7session_start() 函数可以接受一个选项数组作为参数。
  • PHP 5session_start() 不支持选项数组。

    // PHP 7
    session_start([
       'cache_limiter' => 'private',
       'read_and_close' => true,
    ]);
    

15. assert() 的改进

  • PHP 7assert() 函数可以接受一个表达式作为字符串,并且可以抛出异常。
  • PHP 5assert() 只能接受布尔表达式。

    // PHP 7
    assert('2 < 1', new AssertionError('Assertion failed'));
    

16. use 语句的改进

  • PHP 7 允许在 use 语句中同时导入多个类或函数。
  • PHP 5 不支持这种语法。

    // PHP 7
    use Some\Namespace\{ClassA, ClassB, ClassC as C};
    

17. null 合并运算符 (??)

  • PHP 7 引入了 null 合并运算符 (??),用于简化检查变量是否存在且不为 null 的操作。
  • PHP 5 不支持 null 合并运算符。

    // PHP 7
    $username = $_GET['username'] ?? 'guest';
    

18. intfloat 类型声明

  • PHP 7 允许在函数参数和返回值中声明 intfloat 类型。
  • PHP 5 不支持这种类型声明。

    // PHP 7
    function add(int $a, float $b): float {
       return $a + $b;
    }
    

19. void 返回类型

  • PHP 7.1 引入了 void 返回类型,表示函数不返回任何值。
  • PHP 5 不支持 void 返回类型。

    // PHP 7.1
    function logMessage(string $message): void {
       echo $message;
    }
    

20. iterable 伪类型

  • PHP 7.1 引入了 iterable 伪类型,表示可以遍历的值(如数组或实现了 Traversable 接口的对象)。
  • PHP 5 不支持 iterable 伪类型。

    // PHP 7.1
    function process(iterable $items): void {
       foreach ($items as $item) {
           // process item
       }
    }
    

21. nullable 类型

  • PHP 7.1 引入了 nullable 类型,允许在类型声明前加上 ? 表示该类型可以为 null
  • PHP 5 不支持 nullable 类型。

    // PHP 7.1
    function getUsername(?string $username): ?string {
       return $username;
    }
    

22. list() 的改进

  • PHP 7.1 允许在 list() 中使用数组的键。
  • PHP 5list() 只能使用索引数组。

    // PHP 7.1
    $data = ['a' => 1, 'b' => 2];
    list('a' => $a, 'b' => $b) = $data;
    echo $a; // 1
    echo $b; // 2
    

23. void 返回类型

  • PHP 7.1 引入了 void 返回类型,表示函数不返回任何值。
  • PHP 5 不支持 void 返回类型。

    // PHP 7.1
    function logMessage(string $message): void {
       echo $message;
    }
    

24. iterable 伪类型

  • PHP 7.1 引入了 iterable 伪类型,表示可以遍历的值(如数组或实现了 Traversable 接口的对象)。
  • PHP 5 不支持 iterable 伪类型。

    // PHP 7.1
    function process(iterable $items): void {
       foreach ($items as $item) {
           // process item
       }
    }
    

25. nullable 类型

  • PHP 7.1 引入了 nullable 类型,允许在类型声明前加上 ? 表示该类型可以为 null
  • PHP 5 不支持 nullable 类型。

    // PHP 7.1
    function getUsername(?string $username): ?string {
       return $username;
    }
    

26. list() 的改进

  • PHP 7.1 允许在 list() 中使用数组的键。
  • PHP 5list() 只能使用索引数组。

    // PHP 7.1
    $data = ['a' => 1, 'b' => 2];
    list('a' => $a, 'b' => $b) = $data;
    echo $a; // 1
    echo $b; // 2
    

27. void 返回类型

  • PHP 7.1 引入了 void 返回类型,表示函数不返回任何值。
  • PHP 5 不支持 void 返回类型。

    // PHP 7.1
    function logMessage(string $message): void {
       echo $message;
    }
    

28. iterable 伪类型

  • PHP 7.1 引入了 iterable 伪类型,表示可以遍历的值(如数组或实现了 Traversable 接口的对象)。
  • PHP 5 不支持 iterable 伪类型。

    // PHP 7.1
    function process(iterable $items): void {
       foreach ($items as $item) {
           // process item
       }
    }
    

29. nullable 类型

  • PHP 7.1 引入了 nullable 类型,允许在类型声明前加上 ? 表示该类型可以为 null
  • PHP 5 不支持 nullable 类型。

    // PHP 7.1
    function getUsername(?string $username): ?string {
       return $username;
    }
    

30. list() 的改进

  • PHP 7.1 允许在 list() 中使用数组的键。
  • PHP 5list() 只能使用索引数组。

    // PHP 7.1
    $data = ['a' => 1, 'b' => 2];
    list('a' => $a, 'b' => $b) = $data;
    echo $a; // 1
    echo $b; // 2
    

31. void 返回类型

  • PHP 7.1 引入了 void 返回类型,表示函数不返回任何值。
  • PHP 5 不支持 void 返回类型。

    // PHP 7.1
    function logMessage(string $message): void {
       echo $message;
    }
    

32. iterable 伪类型

  • PHP 7.1 引入了 iterable 伪类型,表示可以遍历的值(如数组或实现了 Traversable 接口的对象)。
  • PHP 5 不支持 iterable 伪类型。

    // PHP 7.1
    function process(iterable $items): void {
       foreach ($items as $item) {
           // process item
       }
    }
    

33. nullable 类型

  • PHP 7.1 引入了 nullable 类型,允许在类型声明前加上 ? 表示该类型可以为 null
  • PHP 5 不支持 nullable 类型。

    // PHP 7.1
    function getUsername(?string $username): ?string {
       return $username;
    }
    

34. list() 的改进

  • PHP 7.1 允许在 list() 中使用数组的键。
  • PHP 5list() 只能使用索引数组。

    // PHP 7.1
    $data = ['a' => 1, 'b' => 2];
    list('a' => $a, 'b' => $b) = $data;
    echo $a; // 1
    echo $b; // 2
    

35. void 返回类型

  • PHP 7.1 引入了 void 返回类型,表示函数不返回任何值。
  • PHP 5 不支持 void 返回类型。

    // PHP 7.1
    function logMessage(string $message): void {
       echo $message;
    }
    

36. iterable 伪类型

  • PHP 7.1 引入了 iterable 伪类型,表示可以遍历的值(如数组或实现了 Traversable 接口的对象)。
  • PHP 5 不支持 iterable 伪类型。

    // PHP 7.1
    function process(iterable $items): void {
       foreach ($items as $item) {
           // process item
       }
    }
    

37. nullable 类型

  • PHP 7.1 引入了 nullable 类型,允许在类型声明前加上 ? 表示该类型可以为 null
  • PHP 5 不支持 nullable 类型。

    // PHP 7.1
    function getUsername(?string $username): ?string {
       return $username;
    }
    

38. list() 的改进

  • PHP 7.1 允许在 list() 中使用数组的键。
  • PHP 5list() 只能使用索引数组。

    // PHP 7.1
    $data = ['a' => 1, 'b' => 2];
    list('a' => $a, 'b' => $b) = $data;
    echo $a; // 1
    echo $b; // 2
    

39. void 返回类型

  • PHP 7.1 引入了 void 返回类型,表示函数不返回任何值。
  • PHP 5 不支持 void 返回类型。

    // PHP 7.1
    function logMessage(string $message): void {
       echo $message;
    }
    

40. iterable 伪类型

  • PHP 7.1 引入了 iterable 伪类型,表示可以遍历的值(如数组或实现了 Traversable 接口的对象)。
  • PHP 5 不支持 iterable 伪类型。

    // PHP 7.1
    function process(iterable $items): void {
       foreach ($items as $item) {
           // process item
       }
    }
    

41. nullable 类型

  • PHP 7.1 引入了 nullable 类型,允许在类型声明前加上 ? 表示该类型可以为 null
  • PHP 5 不支持 nullable 类型。

    // PHP 7.1
    function getUsername(?string $username): ?string {
       return $username;
    }
    

42. list() 的改进

  • PHP 7.1 允许在