PHP方法的返回值示例詳解
前言
不僅是PHP,大部分編程語(yǔ)言的函數(shù)或者叫方法,都可以用return來(lái)定義方法的返回值。從函數(shù)這個(gè)叫法來(lái)看,本身它就是一個(gè)計(jì)算操作,因此,計(jì)算總會(huì)有個(gè)結(jié)果,如果你在方法體中處理了結(jié)果,比如進(jìn)行了持久化保存,那么這個(gè)函數(shù)就不用返回任何內(nèi)容。而計(jì)算的結(jié)果是要給外部使用的,這時(shí)候就要將計(jì)算結(jié)果進(jìn)行返回了。
return關(guān)鍵字
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; // 后面不會(huì)執(zhí)行了 } var_dump(testC(1, 2)); // NULL
不用return或者直接return;都會(huì)返回NULL,return會(huì)阻斷方法體中后續(xù)代碼的執(zhí)行。如果要返回多個(gè)值,只能使用數(shù)組組裝數(shù)據(jù)。
function testD($a, $b) { return [ $a + $b, $a * $b, ]; } var_dump(testD(1, 2)); // [3, 2]
返回值類(lèi)型聲明
關(guān)于返回值這一塊還是比較好理解的。下面才是重頭戲,在PHP7的新特性中,返回值聲明是非常亮眼的一道風(fēng)景。
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類(lèi)型,那么將直接報(bào)TypeError的錯(cuò)誤。
那么定義了返回值類(lèi)型聲明有什么好處呢?我們?cè)?a target="_blank" href="http://www.dbjr.com.cn/article/204623.htm"> PHP方法參數(shù)的那點(diǎn)事兒 有介紹過(guò)類(lèi)型聲明的好處,這里就不過(guò)多贅述了,不管是參數(shù)類(lèi)型聲明還是返回值類(lèi)型聲明,都是一樣的。
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的實(shí)例 var_dump(testH()); // B的實(shí)例 var_dump(testI()); // B的實(shí)例
同樣,數(shù)組和類(lèi)類(lèi)型都是可以聲明定義的。不過(guò)除此之外,返回值聲明還可以定義void。它的作用其實(shí)就是聲明返回值為NULL,不能直接寫(xiě):NULL,而只能用:void來(lái)進(jìn)行聲明。
function testJ(): void { echo "testJ"; // return 1; } var_dump(testJ());
這時(shí),如果嘗試進(jìn)行任何的return返回,都會(huì)直接報(bào)錯(cuò):Fatal error: A void function must not return a value。
總結(jié)
我們可以看到,PHP在不斷的發(fā)展中一直在吸取其他語(yǔ)言中的優(yōu)秀特性。很明顯,添加這些類(lèi)型聲明的目的就是為了將來(lái)的編譯器做準(zhǔn)備的。這也是PHP8的一個(gè)重要特性,讓我們拭目以待吧!
到此這篇關(guān)于PHP方法的返回值的文章就介紹到這了,更多相關(guān)PHP方法返回值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
測(cè)試代碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/PHP方法的返回值.php
參考文檔:
相關(guān)文章
PHP結(jié)合jQuery實(shí)現(xiàn)找回密碼
本文將使用PHP+Mysql+jQuery來(lái)實(shí)現(xiàn)一個(gè)密碼找回的功能,分享給大家思路和具體的代碼,有需要的小伙伴可以參考下。2015-07-07php監(jiān)測(cè)數(shù)據(jù)是否成功插入到Mysql數(shù)據(jù)庫(kù)的方法
在PHP中該怎么用代碼判斷數(shù)據(jù)是否成功插入到Mysql數(shù)據(jù)庫(kù)?這篇文章中給出了兩種解決的方法,大家可以根據(jù)需要選擇相對(duì)應(yīng)的方法,有需要的朋友們下面來(lái)跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11php中關(guān)于token驗(yàn)證的相關(guān)問(wèn)題詳解
這篇文章主要介紹了php中關(guān)于token驗(yàn)證的相關(guān)問(wèn)題詳解的相關(guān)資料,需要的朋友可以參考下2023-05-05php中用文本文件做數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
相信大家在網(wǎng)上申請(qǐng)的免費(fèi)PHP空間,如果是初級(jí)用戶,一般都是沒(méi)得MySQL可供使用,那么我們解決數(shù)據(jù)處理的方法之一就是用文本文件了。但是用什么方法才可以最快最方便的處理文本數(shù)據(jù)呢?2008-03-03利用discuz實(shí)現(xiàn)PHP大文件上傳應(yīng)用實(shí)例代碼
論壇的附件功能當(dāng)初設(shè)計(jì)的初衷并不是為了文件管理,由于服務(wù)器配置,php,網(wǎng)絡(luò)等多方面因素,使得通過(guò)論壇上傳文件并不是一個(gè)好方案。2008-11-11不錯(cuò)的一篇面向?qū)ο蟮腜HP開(kāi)發(fā)模式(簡(jiǎn)寫(xiě)版)
不錯(cuò)的一篇面向?qū)ο蟮腜HP開(kāi)發(fā)模式(簡(jiǎn)寫(xiě)版)...2007-03-03PHP模擬asp.net的StringBuilder類(lèi)實(shí)現(xiàn)方法
這篇文章主要介紹了PHP模擬asp.net的StringBuilder類(lèi)實(shí)現(xiàn)方法,較為簡(jiǎn)單的模擬了StringBuilder類(lèi)針對(duì)文本的基本操作技巧,需要的朋友可以參考下2015-08-08