Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in die Implementierung von Überladung in PHP

Einführung in die Implementierung von Überladung in PHP

黄舟
黄舟Original
2017-10-19 09:16:401644Durchsuche

Dieser Artikel stellt hauptsächlich die gängigen Überladungsmethoden in PHP vor. Er analysiert vier gängige Implementierungstechniken der Überladung in PHP und vergleicht sie mit Java in Form von Beispielen.

Dieser Artikel erklärt die Beispiele gängiger Methoden zur Implementierung von Überladung in PHP. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

PHP ist eine schwach typisierte Sprache und weist keine Überladung wie eine stark typisierte Sprache wie JAVA auf.

Überladen bedeutet im Allgemeinen, dass derselbe Funktionsname oder Methodenname vorhanden ist, aber unterschiedliche Parameterlisten (einschließlich der Anzahl der Parameter und Parametertypen)

Nach dieser Definition ist PHP nicht überladen, da PHP dies tut nicht zulassen, dass derselbe Funktionsname existiert.

Aber es nicht zu haben bedeutet nicht, dass es nicht erreicht werden kann.

PHP verfügt über vier Mechanismen zum Implementieren von Überladung: (im Vergleich zu Java unten)

1. Schwacher Typ, keine Notwendigkeit, Variablentypen zu definieren

Geben Sie zunächst ein Beispiel für eine JAVA-Überladung:


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);
  }
}

Wenn der obige Code in der PHP-Sprache implementiert ist:


<?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. Optionale Parameter, die es Variablen ermöglichen, Standardwerte festzulegen

JAVA-Überladungsbeispiel:


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);
  }
}

Verwenden Sie die optionale PHP-Parameterfunktion zur Implementierung:


<?php
function sum($var1,$var2,$var3=NULL){//$var3设置默认值
  echo $var1+$var2+$var3;
}
sum(1,2);//2
sum(1,2,3);//2.5
?>

Sie können die gleiche Funktion sehen, aber PHP ist schwach Typsprachen ​​sind einfacher zu implementieren

3. Variable Parameter

verwenden hauptsächlich die folgenden zwei Funktionen:

func_num_args() Rückgabe die Anzahl der Parameter der Funktion
func_get_args() Gibt ein Array zurück, das die Funktionsparameterliste enthält

Spezifische Implementierungsmethode:


<?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. Verwenden Sie die magische Methode __call()

public mixed __call ( string $name , array $arguments )

Wenn Sie eine unzugängliche Methode in einem Objekt aufrufen, __call() Wird aufgerufen automatisch

$nameDer Parameter ist der Name der aufzurufenden Methode$argumentDer Parameter ist das Parameterarray der aufgerufenen Methode

Die spezifische Implementierungsmethode ähnelt dem dritten Punkt oben:


<?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");
?>

Das obige ist der detaillierte Inhalt vonEinführung in die Implementierung von Überladung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn