PHP實現(xiàn)重載的常用方法實例詳解
本文實例講述了PHP實現(xiàn)重載的常用方法。分享給大家供大家參考,具體如下:
php是弱類型語言,并沒有像JAVA這種強類型語言一樣有重載。
重載一般來說就是擁有相同的函數(shù)名或方法名,但是參數(shù)列表卻不同(包括參數(shù)個數(shù)和參數(shù)類型)
從這個定義來說,php是沒有重載的,因為php不允許存在相同的函數(shù)名。
但是沒有并不意味著不能實現(xiàn)。
php有四種機制可以實現(xiàn)重載:(下面用java進行對比)
1. 弱類型,無需定義變量類型
先舉一個JAVA重載的例子:
class demo { public static void main (String[] args) { sum(1,1);//2 sum(1,1.5);//2.5 sum(1.5,1.5);//3.0 } public static void sum(int var1,int var2){ System.out.println(var1+var2); } public static void sum(int var1,double var2){ System.out.println(var1+var2); } public static void sum(double var1,double var2){ System.out.println(var1+var2); } }
上面的代碼如果用php語言實現(xiàn):
<?php function sum($var1,$var2){ echo $var1+$var2; } sum(1,1);//2 sum(1,1.5);//2.5 sum(1.5,1.5);//3 ?>
2. 可選參數(shù),允許變量設(shè)置默認值
JAVA重載例子:
class demo { public static void main (String[] args) { sum(1,2);//3 sum(1,2,3);//6 } public static void sum(int var1,int var2){ System.out.println(var1+var2); } public static void sum(int var1,int var2,int var3){ System.out.println(var1+var2+var3); } }
用php可選參數(shù)特性實現(xiàn):
<?php function sum($var1,$var2,$var3=NULL){//$var3設(shè)置默認值 echo $var1+$var2+$var3; } sum(1,2);//2 sum(1,2,3);//2.5 ?>
可以看到同樣的功能,但是php這種弱類型語言實現(xiàn)起來更簡單
3. 可變參數(shù)
主要用到以下兩個函數(shù):
func_num_args()
返回函數(shù)的參數(shù)個數(shù)
func_get_args()
返回一個包含函數(shù)參數(shù)列表的數(shù)組
具體實現(xiàn)方式:
<?php class demo{ public function method(){ $numargs = func_num_args();//獲得參數(shù)數(shù)量 $args = func_get_args();//獲得參數(shù)數(shù)組 switch ($numargs) {//通過變量個數(shù)來確定調(diào)用哪個方法 case 2: $this->method2($args[0],$args[1]); break; case 3: $this->method3($args[0],$args[1],$args[2]); break; } } private function method2($var1,$var2){ #code... } private function method3($var1,$var2,$var3){ #code... } } //調(diào)用 $obj = new demo(); $obj->method('var1','var2'); $obj->method('var1','var2','var3'); //看起來似乎通過一個接口調(diào)用 //但其實內(nèi)部已經(jīng)調(diào)用了各自定義的方法 ?>
4. 使用魔術(shù)方法 __call()
public mixed __call ( string $name , array $arguments )
在對象中調(diào)用一個不可訪問的方法時,__call()
會被自動調(diào)用
$name參數(shù)是要調(diào)用的方法名稱 $argument參數(shù)是被調(diào)用方法的參數(shù)數(shù)組
具體實現(xiàn)方式類似上面的第三要點:
<?php class demo{ public function __call($name,$arguments){ if($name == "method"){ switch (count($arguments)) {//獲得參數(shù)數(shù)組個數(shù) case 2: $this->method2($args[0],$args[1]); break; case 3: $this->method3($args[0],$args[1],$args[2]); break; } } } private function method2($var1,$var2){ #code... } private function method3($var1,$var2,$var3){ #code... } } //調(diào)用 $obj = new demo(); $obj->method("var1","var2"); $obj->method("var1","var2","var3"); ?>
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
- php面向?qū)ο蟮姆椒ㄖ剌d兩種版本比較
- php繼承中方法重載(覆蓋)的應(yīng)用場合
- PHP使用方法重載實現(xiàn)動態(tài)創(chuàng)建屬性的get和set方法
- PHP利用func_get_args和func_num_args函數(shù)實現(xiàn)函數(shù)重載實例
- php中拷貝構(gòu)造函數(shù)、賦值運算符重載
- PHP小技巧之函數(shù)重載
- PHP面相對象中的重載與重寫
- PHP面向?qū)ο蟪绦蛟O(shè)計重載(overloading)操作詳解
- PHP面向?qū)ο蟪绦蛟O(shè)計模擬一般面向?qū)ο笳Z言中的方法重載(overload)示例
- php魔術(shù)函數(shù)__call()用法實例分析
- PHP __call()方法實現(xiàn)委托示例
- php 使用 __call實現(xiàn)重載功能示例
相關(guān)文章
PHP移動文件指針ftell()、fseek()、rewind()函數(shù)總結(jié)
這篇文章主要介紹了PHP移動文件指針ftell()、fseek()、rewind()函數(shù)總結(jié),本文先是對它們的作用做了講解,然后給出具體使用例子,需要的朋友可以參考下2014-11-11docker?中搭建php環(huán)境經(jīng)驗分享
這篇文章主要介紹了docker?中搭建php環(huán)境經(jīng)驗分享的相關(guān)資料,需要的朋友可以參考下2023-09-09