PHP7新特性簡(jiǎn)述
類(lèi)型聲明
看代碼,一目了然了。
class person { public function age(int $age) : string { return 'Age is ' . $age; } }
命名空間與use關(guān)鍵字批量聲明
非混合模式
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 };
復(fù)合模式
use Publishers\Packt\{ Paper\Book, Electronic\Ebook, Media\Video };
匿名類(lèi)
匿名類(lèi)的聲明與使用時(shí)同時(shí)進(jìn)行的,具備其他類(lèi)所具備的所以功能,區(qū)別在于匿名類(lèi)沒(méi)有類(lèi)名。語(yǔ)法如下:
new class(argument) { definition };
匿名類(lèi)是沒(méi)有類(lèi)名的,但在PHP內(nèi)部,會(huì)在內(nèi)存的引用地址表中為其分配一個(gè)全局唯一的名稱(chēng)。
$name = new class('You') { public function __construct($name) { echo $name; } };
匿名類(lèi)可以繼承父類(lèi)及父類(lèi)的方法。
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();
匿名類(lèi)可以繼承接口。
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();
匿名類(lèi)可以嵌套在一個(gè)類(lèi)中使用。
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);
摒棄老式構(gòu)造函數(shù)
從PHP4開(kāi)始,構(gòu)造函數(shù)可以通過(guò)命名與類(lèi)名一致的方式來(lái)聲明自己是構(gòu)造函數(shù),在PHP7中這種方式聲明構(gòu)造函數(shù)依然可以使用,但不推薦使用,會(huì)輸出不推薦的信息 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開(kāi)始,程序中的fatal錯(cuò)誤都可以被截獲,PHP7提供了throwable接口,異常與錯(cuò)誤都繼承于這個(gè)接口。
Error
現(xiàn)在大多數(shù)的fatal錯(cuò)誤情況會(huì)拋出一個(gè)error實(shí)例,類(lèi)似于截獲異常,error實(shí)例可以被try/catch截獲。
try { ... } catch(Error $e) { echo $e->getMessage(); }
一些錯(cuò)誤情況只有error的子實(shí)例會(huì)被拋出,例如 TypeError、DivisionByZeroError、ParseError等。
<=>操作符
<=>操作符將==、<、>三個(gè)比較操作符打包在了一起,具體使用規(guī)則如下。
操作符兩邊相等時(shí)返回 0
操作符左邊小于右邊時(shí)返回 -1
操作符左邊大于右邊時(shí)返回 1
null合并運(yùn)算符
?? 合并運(yùn)算符,在第一操作數(shù)存在時(shí)可被直接返回,否則返回第二操作數(shù)。
$title = $post['title'] ?? NULL; $title = $post['title'] ?? $get['title'] ?? 'No title';
uniform變量語(yǔ)法
$first = ['name' => 'second']; $second = 'two'; echo $$first['name']; echo ${Sfirst['name']}; // PHP7 ... echo $object->$methods['title']; echo $object->{$methods['title']}; // PHP7
主要是因?yàn)镻HP7與之前版本PHP的解析方式不一樣,在PHP7中加上花括號(hào)就可以啦,就像上邊代碼這樣,否則會(huì)報(bào)錯(cuò)。
常量數(shù)組
從PHP5.6開(kāi)始常量數(shù)組可以用const關(guān)鍵字來(lái)聲明,在PHP7中常量數(shù)組可以通過(guò)define函數(shù)來(lái)初始化。
const STORES = ['en', 'fr', 'ar']; // php5.6 define('STORES', ['en', 'fr', 'ar']); // php7
switch中的default默認(rèn)值
在PHP7之前,switch語(yǔ)句中允許多個(gè)default默認(rèn)值,從PHP7開(kāi)始,只能有一個(gè)default默認(rèn)值,否則會(huì)產(chǎn)生fatal級(jí)別錯(cuò)誤。
// 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函數(shù)中的選項(xiàng)數(shù)組
在PHP7之前,使用session的時(shí)候都必須先調(diào)用session_start()函數(shù),且這個(gè)函數(shù)并沒(méi)有參數(shù)需要傳遞,所有session相關(guān)的配置都在php.ini文件中,從PHP7開(kāi)始,可以在調(diào)用這個(gè)函數(shù)時(shí)傳遞參數(shù)選項(xiàng)數(shù)組,這些設(shè)置信息將覆蓋php.ini中的session配置。
session_start([ 'cookie_lifetime' => 3600, 'read_and_close' => true ]);
unserialize函數(shù)引入過(guò)濾器
unserialize()可以反序列化任何類(lèi)型的對(duì)象,沒(méi)有任何過(guò)濾項(xiàng),不安全,PHP7在unserialize()中引入了過(guò)濾器,且默認(rèn)允許反序列化所有類(lèi)型的對(duì)象。
$result = unserialize($object, ['allowed_classes' => ['Book', 'Ebook']]);
以上所述是小編給大家介紹的PHP7新特性簡(jiǎn)述,希望對(duì)大家有所幫助!
相關(guān)文章
JS驗(yàn)證輸入的是否是數(shù)字及保留幾位小數(shù)問(wèn)題
這篇文章主要介紹了JS驗(yàn)證輸入的是否是數(shù)字及保留幾位小數(shù)問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05js調(diào)用webservice中的方法實(shí)現(xiàn)思路及代碼
js調(diào)用webservice還算是一個(gè)比較實(shí)用的功能,本文提供了實(shí)現(xiàn)思路及代碼,感興趣的你可不要錯(cuò)過(guò)了哈,希望本文可以幫助到你啊2013-02-02javascript 將共享屬性遷移到原型中去的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇javascript 將共享屬性遷移到原型中去的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08