PHP7
性能速度是5.6的两倍
语法特性
参数类型声明
function a(int $num) {...}
返回值类型声明
function a(array $a): array {
return $a;
}
null合并运算符
$username = $_GET['user'] ?? 'nobody'
define() 定义常量数组
- 现在可以用 define() 定义数组常量。在 PHP 5.6,只可以被定义与 const。
define('ANIMALS', [
'dog',
'cat',
'bird'
]);
echo ANIMALS[1]; // outputs "cat"
匿名类
命名空间引用优化
// PHP7以前语法的写法
use FooLibrary\Bar\Baz\ClassA;
use FooLibrary\Bar\Baz\ClassB;
// PHP7新语法写法
use FooLibrary\Bar\Baz\{ ClassA, ClassB};
7.1
移除mcrypt_*序列函数,推荐使用:openssl 序列函数
可为空(Nullable)类型
参数和返回值的类型声明可以通过在类型名称前添加一个问号(?)来标记为空(null)。表明函数参数或者返回值的类型要么为指定类型,要么为 null。
参数
function testReturn(?string $name)
{
return $name;
}
var_dump(testReturn('yangyi'));
var_dump(testReturn(null));
var_dump(testReturn2()); #PHP Fatal error: Uncaught ArgumentCountError: ....
返回值
function testReturn3() : ?string
{
//return "abc";
//return null;
}
var_dump(testReturn3());
void返回类型
void 只能用于返回值,不能用于参数中
如果在类的继承中,申明为void返回类型的方法,子类要是继承重写,也只能返回void, 否则会触发错误
function testReturn4() : void
{
//1. 要么啥都不返还 ok
//2. 要么只return; ok
//return;
//3. return null 也会报错
//return null;
//4. return 4 会报错
//return 4;
}
支持负的字符串偏移
有2个更新,1是字符串直接取,2是strpos函数第三个参数支持负数。表示从尾部取。
var_dump("abcdef"[-2]); // e
var_dump(strpos("aabbcc", "b", -3)); //3
多条件 catch
可以多个一起处理。用"|" 分割。
try {
// Some code...
} catch (ExceptionType1 | ExceptionType2 $e) {
// 对于 ExceptionType1 和 ExceptionType2 的处理
} catch (Exception $e) {
// ...
}
7.2
主要是底层优化
提供了更加安全的改进
Mcrypt被取消,停止使用sha1() or md5(),增加了Argon2
推荐用password_*系列
password_hash('password', PASSWORD_ARGON2I);
将 each 函数移除
7.3
废弃大小写不敏感的常量
网友评论