PHP 7.1中有哪些重大的更新
PHP 7.1.0 帶來了大量的改進和新功能: 可空類型 返回空類型 可迭代的psuedo-type 支持常量可見的類 數組解構 square 框架和在 list()中允許指定 keys 多異常類型捕獲
可空類型
PHP 7添加了參數類型聲明和函數返回值類型聲明,函數參數或者返回值的類型要麼為指定類型要麼為null。舉例如下:
function sum(int $a, int $b): ?int{
return $a + $b;
}
上述函數可以返回一個整數或一個空值,所以如果函數的邏輯中有錯誤,將不會再返回一個空類型來報錯。你也可以驗證一下。
function sum(?int $a, ?int $b): ?int{
if ($a == null || $b == null) { return null;
} return $a + $b;
}
要注意的是:調用沒有參數的函數將拋出異常!
var_dump(sum(null, null)); // NULLvar_dump(sum()); // throw ArgumentCountError exception
這意味着,當他們沒有默認值時,應該顯示指定參數。
還有就是,在重載或實現方法時不能把可空類型作為返回類型,但你可以刪除它。反之亦然!
interface Fooable {
function foo(): ?Fooable;}interface StrictFooable extends Fooable {
function foo(): Fooable; // valid}interface Fooable {
function foo(): Fooable;}interface LooseFooable extends Fooable {
function foo(): ?Fooable; // invalid}
解構陣列
當我們解構陣列是通常會這樣做:
list($a, $b, $c) = [1, 2, 3];
var_dump($a, $b, $c); // int(1) int(2) int(3)
但這是錯的`,因為我們不能指定鍵來提取和嘗試使用索引鍵的功能
list($a, $b, $c) = ["a" => 1, "b" => 2, "c" => 3];
var_dump($a, $b, $c); // NULL NULL NULL
RFC提供了更多的控制陣列的解構。上面的代碼可以改為:
list("a" => $a, "b" => $b, "c" => $c) = ["a" => 1, "b" => 2, "c" => 3];
var_dump($a, $b, $c); // int(1) int(2) int(3)
上面的例子可以寫成:
["a" => $a, "b" => $b, "c" => $c] = ["a" => 1, "b" => 2, "c" => 3];
var_dump($a, $b, $c); // int(1) int(2) int(3)
很酷對不對?它還適用於多維數組:
[[$a, $b], [$c, $d]] = [[1, 2], [3, 4]];
var_dump($a, $b, $c, $d); // int(1) int(2) int(3) int(4)[["b" => $b], ["c" => $c]] = [["a" => 1, "b" => 2], ["c" => 3, "d" => 4]];
var_dump($b, $c); // int(2) int(3)
Iterable 偽類
PHP 7.1 新引入了一個被稱為 iterable 的偽類。
它可以被用在參數或者返回值類型中,它代表接受數組或者實現了 Traversable 接口的對象。以下面的代碼為例:
// PHP 5.6function dump(array $items){
var_dump($items);
}
dump([2, 3, 4]);
dump(new Collection());
array(3) {
[0]=>
int(2)
[1]=>
int(3)
[2]=>
int(4)
}
Catchable fatal error: Argument 1 passed to dump() must be of the type array, object given...
但在這種情況下,函數不會接受一個價值,將拋出一個錯誤。這一新的變化,讓你使用迭代來描述而不是手動一個價值主張。
// PHP 7.1function dump(iterable $items){
var_dump($items);
}
dump([2, 3, 4]);
dump(new Collection());
array(3) {
[0]=>
int(2)
[1]=>
int(3)
[2]=>
int(4)
}
object(Collection)#2 (0) {}
void返回類型
這是我最喜歡的新功能之一。PHP 7添加了指定函數返回類型的特性,一個新的返回值類型 void 被引入。試圖去獲取一個void 方法的返回值時,將被迫返回null!並且不會產生任何警告。
function dump($object): void{
var_dump($object);
}
返回類型聲明為 void 類型的方法要麼乾脆省去 return 語句,要麼添加一個空的函數(return;)。
類常量的可見性
雖然這是個很小的變化,但是加強了面向對象的封裝,現在起支持設置類常量的可見性:
class Post{
protected const PUBLISHED = 1; protected const DRAFT = 2; protected const TRASHED = 3; // ...}
捕獲多個異常類型
在以往的try... catch 語句中,每個catch 只能設定一個條件判斷,新的版本可以在一個 catch 中設置多個條件,從而減少了需要複製的代碼。 Java 等其他語言同樣具備這種能力。以下面的代碼為例:
// { $user->payMonth($month);
} catch (UserSuspendedException $ex) {
DB::rollBack(); return redirect()
->back()
->withInput()
->withErrors([$ex->getMessage()]);
} catch (PaidMonthException $e) {
DB::rollBack(); return redirect()
->back()
->withInput()
->withErrors([$ex->getMessage()]);
}// ...
-
PHP時間和日期函數怎麼操作
php函數的多樣化和功能相近真是一大特點,同一個應用可以用多種函數實現,這恐怕也是開源的一個弊端了;通過對PHP時間函數的系統學習,充分理解了時間戳和時區的概念(這個真的很重要),有需要的小夥伴可以參考下。PHP中所有函數都是UNIX紀元的,即從1970年1月1日開始的。日...
-
Yii2創建表單(ActiveForm)方法
Yii2創建表單(ActiveForm)的方法,結合實例形式詳細分析了Yii創建表單的詳細步驟及相關函數與屬性的使用技巧,需要的朋友可以參考下.由於表單涉及到一些驗證方面的信息,屬性設置又比較多、比較複雜,所以哪裏有什麼不正確的地方請留言指點目錄表單的生成表單中的方...
-
用PHP實現文件上傳二法
PHP(HypertextPreprocessor)是一種HTML內嵌式的語言(類似IIS上的ASP)。而PHP獨特的語法混合了C、Java、Perl以及PHP式的新語法。它可以比CGI或者Perl更快速的執行動態網頁。除此之外,用PHP寫出來的Web後端CGI程序,可以很輕易的移植到不同的系統平台上。我們在做...
-
如何把PHP二進制與字符串之間的相互轉換
PHP是一種HTML內嵌式的語言,是一種在服務器端執行的嵌入HTML文檔的腳本語言,語言的`風格有類似於C語言,被廣泛地運用。以下是小編為大家搜索整理的如何把PHP二進制與字符串之間的相互轉換,希望能給大家帶來幫助,更多精彩內容請及時關注我們應屆畢業生考試網![代碼]p...