PHP方法的返回值示例詳解
前言
不僅是PHP,大部分編程語言的函數或者叫方法,都可以用return來定義方法的返回值。從函數這個叫法來看,本身它就是一個計算操作,因此,計算總會有個結果,如果你在方法體中處理瞭結果,比如進行瞭持久化保存,那麼這個函數就不用返回任何內容。而計算的結果是要給外部使用的,這時候就要將計算結果進行返回瞭。
return關鍵字
function testA($a, $b) { echo $a + $b; } var_dump(testA(1, 2)); // NULL function testB($a, $b) { return $a + $b; } var_dump(testB(1, 2)); // 3 function testC($a, $b) { return; echo $a + $b; // 後面不會執行瞭 } var_dump(testC(1, 2)); // NULL
不用return或者直接return;都會返回NULL,return會阻斷方法體中後續代碼的執行。如果要返回多個值,隻能使用數組組裝數據。
function testD($a, $b) { return [ $a + $b, $a * $b, ]; } var_dump(testD(1, 2)); // [3, 2]
返回值類型聲明
關於返回值這一塊還是比較好理解的。下面才是重頭戲,在PHP7的新特性中,返回值聲明是非常亮眼的一道風景。
function testE($a, $b) : bool { if($a+$b == 3){ return TRUE; }else{ return NULL; } } var_dump(testE(1, 2)); // true var_dump(testE(1.1, 2.2)); //TypeError: Return value of testE() must be of the type bool, null returned
如上例所示,如果返回值不是bool類型,那麼將直接報TypeError的錯誤。
那麼定義瞭返回值類型聲明有什麼好處呢?我們在 PHP方法參數的那點事兒 有介紹過類型聲明的好處,這裡就不過多贅述瞭,不管是參數類型聲明還是返回值類型聲明,都是一樣的。
function testF($a, $b): array { return [ $a + $b, $a * $b, ]; } var_dump(testF(1, 2)); // [3, 2] interface iA{ } class A implements iA {} class B extends A { public $b = 'call me B!'; } function testG(): A { return new B(); } function testH(): B { return new B(); } function testI(): iA { return new B(); } var_dump(testG()); // B的實例 var_dump(testH()); // B的實例 var_dump(testI()); // B的實例
同樣,數組和類類型都是可以聲明定義的。不過除此之外,返回值聲明還可以定義void。它的作用其實就是聲明返回值為NULL,不能直接寫:NULL,而隻能用:void來進行聲明。
function testJ(): void { echo "testJ"; // return 1; } var_dump(testJ());
這時,如果嘗試進行任何的return返回,都會直接報錯:Fatal error: A void function must not return a value。
總結
我們可以看到,PHP在不斷的發展中一直在吸取其他語言中的優秀特性。很明顯,添加這些類型聲明的目的就是為瞭將來的編譯器做準備的。這也是PHP8的一個重要特性,讓我們拭目以待吧!
到此這篇關於PHP方法的返回值的文章就介紹到這瞭,更多相關PHP方法返回值內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
測試代碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/PHP方法的返回值.php
參考文檔:
https://www.php.net/manual/zh…