PHP 7 新特性学习笔记
1. 声明标量类型
从 PHP 7 开始可以在函数的参数和返回值中使用标量类型声明,包括整型、浮点型、布尔型和字符串类型。
示例:
phpCopy Codefunction 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 Codeecho 1 <=> 2; // 输出 -1
echo 2 <=> 2; // 输出 0
echo 3 <=> 2; // 输出 1
在上面的示例中,我们使用了太空船运算符来比较两个值的大小关系。
4. 匿名类
匿名类可以在声明时直接定义类的属性和方法,方便快速地创建一些简单的类。
示例:
phpCopy Codeinterface 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 Codefunction 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 更加强大、高效和灵活,能够更好地处理大型项目和数据集。