php實作重載的方法介紹

黄舟
發布: 2023-03-16 17:34:01
原創
1657 人瀏覽過

這篇文章主要介紹了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(&#39;var1&#39;,&#39;var2&#39;);
$obj->method(&#39;var1&#39;,&#39;var2&#39;,&#39;var3&#39;);
//看起来似乎通过一个接口调用
//但其实内部已经调用了各自定义的方法
?>
登入後複製

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板