這篇文章主要介紹了PHP實現重載的常用方法,結合實例形式對比java分析了php實現重載的四種常見實現技巧,需要的朋友可以參考下
本文實例講述了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實作重載的方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!