php 7.0,7.1,7.2,7.3新特性

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

废弃大小写不敏感的常量

你可能感兴趣的:(php 7.0,7.1,7.2,7.3新特性)