PHP中實現函式過載
由於PHP是弱型別語言,因此函式的輸入引數型別無法確定(可以使用型別暗示,但是型別暗示無法用在諸如整型,字串之類的標量型別上),並且對於一個函式,比如只定義了3個輸入引數,PHP卻執行呼叫的時候輸入4個或者更多的引數。因此基於這2點,註定了PHP中無法過載函式,(類似Javascript語言),也無法有建構函式的過載。
由於實現函式的過載對提高開發效率很有幫助,如果能象C#或者C++那樣,那就非常好了。事實上,PHP的提供了一個魔術方法,mixed __call ( string name, array arguments )。這個方法在php手冊中也有提及,根據官方文件,稱此方法可以實現函式過載。當呼叫物件中一個不存在的方法的時候,如果定義了__call()方法,則會呼叫該方法。比如下面的程式碼:
|
執行結果為:
__call呼叫
$name為test
Array ( [0] => test [1] => argument )
因此只需要利用該魔術方法既可以實現函式過載。
程式碼如下:
|
輸出如下:
1個引數a
2個引數a,b
3個引數a,b,c
同樣的在PHP中,實現建構函式的過載,也只能變通的實現。實現的關鍵要素是獲取輸入引數,並且根據輸入引數判斷呼叫哪個方法。下面是一個示例程式碼:
|
執行建構函式
1個引數a
執行建構函式
2個引數a,b
執行建構函式
3個引數a,b,c
順便提一下,和c#等面嚮物件語言一樣,php中,把建構函式設成私有或者protected,就不能例項化該物件了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3016/viewspace-2804958/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python中實現函式過載Python函式
- 在 Python 中實現函式過載Python函式
- 如何在Python中實現函式過載Python函式
- js實現函式過載JS函式
- 使用條件型別實現TypeScript中的函式過載型別TypeScript函式
- 美麗的閉包,在js中實現函式過載JS函式
- 為什麼 Python 沒有函式過載?如何用裝飾器實現函式過載?Python函式
- Golang實現PHP常用函式GolangPHP函式
- Go實現PHP常用函式GoPHP函式
- PHP內建字串函式實現PHP字串函式
- PHP 自己實現var_dump函式PHP函式
- JavaScript中的函式過載(Function overloading)JavaScript函式Function
- 118 C++中函式的過載C++函式
- 函式模板過載函式
- TypeScript 函式過載TypeScript函式
- 利用 PHP 反射實現內建函式文件PHP反射函式
- C++ 函式過載,函式模板和函式模板過載,選擇哪一個?C++函式
- 學會TypeScript中函式過載寫法TypeScript函式
- php中函式的實參和形參PHP函式
- Python 函式如何過載?Python函式
- C++函式過載C++函式
- 02-函式過載函式
- 過載的奧義之函式過載函式
- PHP中的過載PHP
- C++ 過載運算子和過載函式C++函式
- Lua中呼叫ref和out修飾引數的函式/過載函式函式
- C++之函式過載C++函式
- js中實現單分派泛函式JS函式
- php函式PHP函式
- PHP 函式PHP函式
- php 函式PHP函式
- 如何實現JS中的過載JS
- 過載運算子、解構函式函式
- python函式過載是什麼?Python函式
- C++ 函式過載和模板C++函式
- PHP中preg_replace函式解析PHP函式
- 如何在PHP中實現鏈式方法呼叫PHP
- TypeScript中函式過載寫法,你在第幾層!TypeScript函式