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,]; } var_dump(testF(1,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方法返回值內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!
測試程式碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/PHP方法的返回值.php
參考文件:
https://www.php.net/manual/zh...