PHP 7 新特性学习笔记

1. 声明标量类型

从 PHP 7 开始可以在函数的参数和返回值中使用标量类型声明,包括整型、浮点型、布尔型和字符串类型。

示例:

phpCopy Code
function sum(int $a, int $b): int { return $a + $b; } echo sum(2, 3); // 输出 5

在上面的示例中,我们声明了一个参数为整型类型的函数 sum,并在参数列表后添加了 : int 来声明返回值类型为整型。

2. 空合并运算符

空合并运算符 ?? 可以用来判断变量是否存在且不为 null,如果是则返回该变量;否则返回一个默认值。

示例:

phpCopy Code
$name = null; echo $name ?? 'John Doe'; // 输出 John Doe $name = 'William'; echo $name ?? 'John Doe'; // 输出 William

在上面的示例中,我们使用了空合并运算符来判断变量 $name 是否存在。由于第一个例子中 $name 的值为 null,所以输出了默认值 "John Doe"。

3. 太空船运算符

太空船运算符 <=> 可以用来比较两个值的大小关系,它会返回以下三种值:

  • 如果 $a > $b,则返回 1
  • 如果 $a == $b,则返回 0
  • 如果 $a < $b,则返回 -1

示例:

phpCopy Code
echo 1 <=> 2; // 输出 -1 echo 2 <=> 2; // 输出 0 echo 3 <=> 2; // 输出 1

在上面的示例中,我们使用了太空船运算符来比较两个值的大小关系。

4. 匿名类

匿名类可以在声明时直接定义类的属性和方法,方便快速地创建一些简单的类。

示例:

phpCopy Code
interface Logger { public function log(string $message); } class DatabaseLogger implements Logger { public function log(string $message) { echo 'Logging message to database: ' . $message; } } $logger = new class implements Logger { public function log(string $message) { echo 'Logging message to console: ' . $message; } }; $logger->log('Hello, world!'); // 输出 Logging message to console: Hello, world!

在上面的示例中,我们使用了匿名类来定义一个实现 Logger 接口的类,并且在创建对象时直接实现了类的方法。

5. 迭代器和生成器

PHP 7 引入了新的迭代器和生成器特性,使得在处理大型数据集时更加高效和灵活。

示例:

phpCopy Code
function fibonacci(int $n): iterable { $a = 0; $b = 1; for ($i = 0; $i < $n; $i++) { yield $a; list($a, $b) = [$b, $a + $b]; } } foreach (fibonacci(10) as $value) { echo $value . ' '; // 输出 0 1 1 2 3 5 8 13 21 34 }

在上面的示例中,我们使用了生成器来生成斐波那契数列的前 10 项,并使用 foreach 循环遍历输出了结果。

结论

PHP 7 引入了许多新特性,包括标量类型声明、空合并运算符、太空船运算符、匿名类和迭代器/生成器。这些特性使得 PHP 更加强大、高效和灵活,能够更好地处理大型项目和数据集。