如,类成员变量可以定义类型。新的闭包处理函数。
null合并赋值运算符:$data['date'] ??= new DateTime();
PHP7.4新特性
1.类型属性
类属性现在支持类型声明。
上面的示例将强制执行$user->id只能赋给整数值,而$user->name只能赋给字符串值。
[复制到剪贴板] |
<?php
class User {
public int $id;
public string $name;
}
?>
上面的示例将强制执行$user->id只能赋给整数值,而$user->name只能赋给字符串值。
2.箭头函数
箭头函数为使用隐式按值范围绑定定义函数提供了一种简写语法。
[复制到剪贴板] |
<?php
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
?>
3.限制返回类型和参数型逆变
[复制到剪贴板] |
<?php
class A {}
class B extends A {}
class Producer {
public function method(): A {}
}
class ChildProducer extends Producer {
public function method(): B {}
}
?>
只有在使用自动加载时,才可以使用全方差支持。在单个文件中,只有非循环类型引用是可能的,因为所有类在被引用之前都必须是可用的。
4.Null 合并赋值运算符
<?php
$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
$array['key'] = computeDefault();
}
?>
$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
$array['key'] = computeDefault();
}
?>
5.合并数组新方式
<?php
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
?>
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
?>
6.数值文字分隔符
<?php
6.674_083e-11; // float
299_792_458; // decimal
0xCAFE_F00D; // hexadecimal
0b0101_1111; // binary
?>
6.674_083e-11; // float
299_792_458; // decimal
0xCAFE_F00D; // hexadecimal
0b0101_1111; // binary
?>
7.数组解包
使用展开运算符... 解包数组。这个特性,应该又是从 js 那吸收过来的。看例子
[复制到剪贴板] |
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
//['banana', 'orange', 'apple', 'pear', 'watermelon'];
//老的写法$fruits = array_merge(['banana', 'orange'],$parts,['watermelon']);
8.strip_tags 接受数组
strip_tags($string, '<a><p>')
PHP 7.4还允许使用数组:
strip_tags($string, ['a', 'p'])
PHP 7.4还允许使用数组:
strip_tags($string, ['a', 'p'])
9.弱引用
弱引用允许程序员保留对对象的引用,而不阻止对象被销毁。