類型聲明
看代碼,一目了然了。
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.6define('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;}// php7switch (true) { case 'value': # code... break; default: # code... break;}
session_start函數中的選項數組
在PHP7之前,使用session的時候都必須先調用session_start()函數,且這個函數并沒有參數需要傳遞,所有session相關的配置都在php.ini文件中,從PHP7開始,可以在調用這個函數時傳遞參數選項數組,這些設置信息將覆蓋php.ini中的session配置。
session_start([ 'cookie_lifetime' => 3600, 'read_and_close' => true]);
unserialize函數引入過濾器
unserialize()可以反序列化任何類型的對象,沒有任何過濾項,不安全,PHP7在unserialize()中引入了過濾器,且默認允許反序列化所有類型的對象。
$result = unserialize($object, ['allowed_classes' => ['Book', 'Ebook']]);
以上所述是小編給大家介紹的PHP7新特性簡述,希望對大家有所幫助!
新聞熱點
疑難解答