您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關php如何實現重載,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
php實現重載的方法:1、弱類型,無需定義變量類型;2、可選參數,允許變量設置默認值;3、可變參數;4、使用魔術方法【__call()】。
php實現重載的方法:
php是弱類型語言,并沒有像JAVA這種強類型語言一樣有重載。
重載一般來說就是擁有相同的函數名或方法名,但是參數列表卻不同(包括參數個數和參數類型)
從這個定義來說,php是沒有重載的,因為php不允許存在相同的函數名。
但是沒有并不意味著不能實現。
php有四種機制可以實現重載:(下面用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語言實現:
<?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、可選參數,允許變量設置默認值
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可選參數特性實現:
<?php function sum($var1,$var2,$var3=NULL){//$var3設置默認值 echo $var1+$var2+$var3; } sum(1,2);//2 sum(1,2,3);//2.5 ?>
可以看到同樣的功能,但是php這種弱類型語言實現起來更簡單
3、可變參數
主要用到以下兩個函數:
func_num_args()
返回函數的參數個數
func_get_args()
返回一個包含函數參數列表的數組
具體實現方式:
<?php class demo{ public function method(){ $numargs = func_num_args();//獲得參數數量 $args = func_get_args();//獲得參數數組 switch ($numargs) {//通過變量個數來確定調用哪個方法 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... } } //調用 $obj = new demo(); $obj->method('var1','var2'); $obj->method('var1','var2','var3'); //看起來似乎通過一個接口調用 //但其實內部已經調用了各自定義的方法 ?>
4、使用魔術方法 __call()
public mixed __call ( string $name , array $arguments )
在對象中調用一個不可訪問的方法時,__call()
會被自動調用
$name參數是要調用的方法名稱 $argument參數是被調用方法的參數數組
具體實現方式類似上面的第三要點:
<?php class demo{ public function __call($name,$arguments){ if($name == "method"){ switch (count($arguments)) {//獲得參數數組個數 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... } } //調用 $obj = new demo(); $obj->method("var1","var2"); $obj->method("var1","var2","var3"); ?>
關于php如何實現重載就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。