摘要:讓我們改變上面的函數(shù)定義現(xiàn)在,第二次調(diào)用這個函數(shù)將會拋出一個致命錯誤,指出其需要的參數(shù)必須是整數(shù)類型??蛇x參數(shù)僅接收類的實例參數(shù)在定義的時候,將可選參數(shù)或帶默認值的參數(shù)作為最后一個參數(shù)。
這段代碼乍一看沒毛病,但是如果你向它傳遞「任意」參數(shù),它就會出問題。
寫出好的代碼是一個學(xué)無止境的過程。讓我們來改進我們編寫 PHP 函數(shù)的方式。 看下上面的代碼,想想第二個函數(shù)調(diào)用那里會發(fā)生什么情況? 它會接受你輸入的任何參數(shù),并且嘗試執(zhí)行然后拋出一個數(shù)學(xué)錯誤。 但是我們怎么才能讓一個函數(shù)嚴格接收能使其正確執(zhí)行的參數(shù)呢? 現(xiàn)代的 PHP 解決了這個問題,并且有更多妙法能讓你的代碼質(zhì)量更進一層,沒有 bug。
函數(shù)參數(shù)與它們的數(shù)據(jù)類型你可以嚴格控制你的函數(shù),使其只接收讓它正確運行的參數(shù)。讓我們改變上面的函數(shù)定義:
現(xiàn)在,第二次調(diào)用這個函數(shù)將會拋出一個致命錯誤,指出其需要的參數(shù)必須是整數(shù)類型。你可以用不同的方式處理參數(shù)。
only("name", "email"); }在定義的時候,將可選參數(shù)或帶默認值的參數(shù)作為最后一個參數(shù)。PHP 7.1 也給可迭代數(shù)據(jù)介紹了一種偽類型。它能接收任何可迭代的數(shù)據(jù)。
上圖是使用了 iterable 數(shù)據(jù)類型的函數(shù)。
現(xiàn)在通過代碼,我們可以控制的更多了,不是嗎?沒錯,確實如此!
函數(shù)與它們的返回值正如你可以控制傳遞給指定函數(shù)的參數(shù)類型一樣,你也可以控制函數(shù)的返回值類型。它能確保你的函數(shù)總是返回同一個數(shù)據(jù)類型,并且不會崩潰。我們改變一下上面的代碼:
only("name", "email"); } // 返回 void 類型 $attribute = 2; function changeAttribute(string &$param, $value) : void { $param = $value; } changeAttribute($attribute, 5); echo $attribute; // 5PHP 逐漸引入了這些功能,如:5.1 版引入的數(shù)組類型作為參數(shù),5.4 版引入的可調(diào)用類型(callable type),以及 7.1 版引入的 void 返回類型等。
可選參數(shù) VS 可空參數(shù)除了可選參數(shù)外,你還可以定義可空(nullable)參數(shù),這意味著你可以定義一種可空參數(shù)類型。我們來看個例子:
顯然,可空參數(shù)不是可選參數(shù),你必須傳遞一個值或者是 null。我個人喜歡使用空值作為可選參數(shù),但這取決于你的任務(wù)需求。
總結(jié)從我開啟職業(yè)生涯的時候我就使用 PHP 了,我真的很愛這門語言。在過去很長一段時間里,它都是開發(fā) web 應(yīng)用的不二之選。現(xiàn)在 7.x 版本又填補了許多高級特性和現(xiàn)代化應(yīng)用的需求,并且提高了開發(fā)者的效率。這門語言正不斷的發(fā)生改變,找出這些變化,并停止過去的寫法,放棄你原來的習(xí)慣并自豪的使用這些新特性,讓你的代碼更易讀易懂。 Happy coding?:)
更多現(xiàn)代化 PHP 知識,請前往 Laravel / PHP 知識社區(qū)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28593.html
摘要:原文地址設(shè)計模式八工廠模式在設(shè)計模式七設(shè)計模式分類中我們提到過創(chuàng)建設(shè)計模式,創(chuàng)建設(shè)計模式專注于設(shè)計對象和實例的創(chuàng)建過程。工廠模式工廠模式,也是五種設(shè)計模式中唯一的類的設(shè)計模式,即在類中就能實現(xiàn)的設(shè)計模式。 原文地址:PHP設(shè)計模式(八):工廠模式 Introduction 在PHP設(shè)計模式(七):設(shè)計模式分類中我們提到過創(chuàng)建設(shè)計模式(Creation patterns),創(chuàng)建設(shè)計模式專...
摘要:大家好,我是永強,就是老李之前經(jīng)常給你們說的區(qū)塊鏈大神大學(xué)肄業(yè)卻依然大公司主程一波兒流只生活在老李口中尚未真實露面的騙錢高手老王的左膀右臂趙永強。 大家好,我是永強,就是老李之前經(jīng)常給你們說的區(qū)塊鏈大神、大學(xué)肄業(yè)卻依然大公司iOS主程一波兒流、只生活在老李口中尚未真實露面的騙錢高手、老王的左膀右臂 ——— 趙永強。我和尼古拉斯趙四之間并沒有什么強關(guān)聯(lián),我只是單方面認識他而已。 之前老李...
摘要:問題什么是調(diào)用棧并且它是的一部分么調(diào)用棧當然是的一部分。為什么理解是重要的因為你在每個進程中只能獲取一個調(diào)用棧。它是一個從事件隊列中跳去事件的循環(huán)并且將它們的回調(diào)壓入到調(diào)用棧中。當調(diào)用棧為空的時候,事件循環(huán)可以決定下一步執(zhí)行哪一個。 你并不知道Node 原文:You don’t know Node 譯者:neal1991 welcome to star my articles-tra...
摘要:面向過程函數(shù)式編程面向?qū)ο缶幊痰诙€并不是大家理解的那樣,我們先說舉個現(xiàn)實例子就明白了。多說一句函數(shù)是編程是非常強大也是我最喜歡的,以后再說,我們先說面向?qū)ο缶幊獭? 概述 當大家已經(jīng)把js的語言基礎(chǔ)理解了,然后能夠?qū)懗鲆恍┖唵蔚睦恿?,這個時候基本上達到了一年工作經(jīng)驗的水平,而自己能夠獨立的寫一些小功能,完成一些小效果,或者臨摹修改一些比較復(fù)雜的插件的時候差不多就是兩年工作經(jīng)驗的水平,...
閱讀 2193·2020-06-12 14:26
閱讀 2495·2019-08-29 16:41
閱讀 1893·2019-08-29 15:28
閱讀 2461·2019-08-26 13:43
閱讀 764·2019-08-26 13:37
閱讀 2783·2019-08-23 18:13
閱讀 2812·2019-08-23 15:31
閱讀 1026·2019-08-23 14:10