PHP7新特性简述

看代码,一目了然了。

class person { public function age(int $age) : string { return 'Age is ' . $age; } }

命名空间与use关键字批量声明

非混合模式

use Publishers\Packt\{ Book, Ebook, Video}; use function Publishers\Packt\{ getBook, saveBook }; use const Publishers\Packt\{ COUNT, KEY };

混合模式

use Publishers\Packt\{ Book, Ebook, Video, function getBook, function saveBook, const COUNT, const KEY };

复合模式

use Publishers\Packt\{ Paper\Book, Electronic\Ebook, Media\Video };

匿名类

匿名类的声明与使用时同时进行的,具备其他类所具备的所以功能,区别在于匿名类没有类名。语法如下:

new class(argument) { definition };

匿名类是没有类名的,但在PHP内部,会在内存的引用地址表中为其分配一个全局唯一的名称。

$name = new class('You') { public function __construct($name) { echo $name; } };

匿名类可以继承父类及父类的方法。

class Packt { protected $number; public function __construct() { echo 'parent construct'; } public function getNumber() : float { return $this->number; } } $number = new class(5) extends Packt { public function __construct(float $number) { parent::__construct(); $this->number = $number; } }; echo $number->getNumber();

匿名类可以继承接口。

interface Publishers { public function __construct(string name, string address); public function getName(); public function getAddress(); } class packt { protected $number; protected $name; protected $address; public function ... } $info = new class('name', 'address') extends Packt implement Publishers { public function __construct(string $name, string $address) { $this->name = $name; $this->address = $address; } public function getName() : string { return $this->name; } public function getAddress() : string { return $this->address; } } echo $info->getName() . ' ' . $info->getAddress();

匿名类可以嵌套在一个类中使用。

class Math { public $first_number = 10; public $second_number = 10; public function add() : float { return $this->first_number + $this->second_number; } public function mutiply_sum() { return new class() extends Math { public function mutiply(float $third_number) : float { return $this->add() * $third_number; } }; } } $math = new Math(); echo $math->mutiply_sum()->mutiply(2);

摒弃老式构造函数

从PHP4开始,构造函数可以通过命名与类名一致的方式来声明自己是构造函数,在PHP7中这种方式声明构造函数依然可以使用,但不推荐使用,会输出不推荐的信息 Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Packt has a deprecated constructor in ...,PHP7中推荐使用 __construct()。

throwable接口

从PHP7开始,程序中的fatal错误都可以被截获,PHP7提供了throwable接口,异常与错误都继承于这个接口。

Error

现在大多数的fatal错误情况会抛出一个error实例,类似于截获异常,error实例可以被try/catch截获。

try { ... } catch(Error $e) { echo $e->getMessage(); }

一些错误情况只有error的子实例会被抛出,例如 TypeError、DivisionByZeroError、ParseError等。

<=>操作符

<=>操作符将==、<、>三个比较操作符打包在了一起,具体使用规则如下。

操作符两边相等时返回 0

操作符左边小于右边时返回 -1

操作符左边大于右边时返回 1

null合并运算符

?? 合并运算符,在第一操作数存在时可被直接返回,否则返回第二操作数。

$title = $post['title'] ?? NULL; $title = $post['title'] ?? $get['title'] ?? 'No title';

uniform变量语法

$first = ['name' => 'second']; $second = 'two'; echo $$first['name']; echo ${Sfirst['name']}; // PHP7 ... echo $object->$methods['title']; echo $object->{$methods['title']}; // PHP7

主要是因为PHP7与之前版本PHP的解析方式不一样,在PHP7中加上花括号就可以啦,就像上边代码这样,否则会报错。

常量数组

从PHP5.6开始常量数组可以用const关键字来声明,在PHP7中常量数组可以通过define函数来初始化。

const STORES = ['en', 'fr', 'ar']; // php5.6 define('STORES', ['en', 'fr', 'ar']); // php7

switch中的default默认值

在PHP7之前,switch语句中允许多个default默认值,从PHP7开始,只能有一个default默认值,否则会产生fatal级别错误。

// php7之前 switch (true) { case 'value': # code... break; default: # code... break; default: # code... break; } // php7 switch (true) { case 'value': # code... break; default: # code... break; }

session_start函数中的选项数组

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyxdjg.html