Maison > développement back-end > Problème PHP > Quelle est la méthode pour implémenter la surcharge en php

Quelle est la méthode pour implémenter la surcharge en php

coldplay.xixi
Libérer: 2023-03-07 09:18:01
original
3712 Les gens l'ont consulté

Comment implémenter la surcharge en PHP : 1. Type faible, pas besoin de définir des types de variables ; 2. Paramètres facultatifs, permettant aux variables de définir des valeurs par défaut ; 4. Utilisez la méthode magique [__call ; () 】.

Quelle est la méthode pour implémenter la surcharge en php

Comment PHP implémente la surcharge :

PHP est un langage faiblement typé et n'est pas aussi fort que les langages de type JAVA Il y a aussi une surcharge.

La surcharge signifie généralement avoir le même nom de fonction ou le même nom de méthode, mais des listes de paramètres différentes (y compris le nombre de paramètres et les types de paramètres)

D'après cette définition, PHP n'est pas surchargé car PHP ne le fait pas permettre au même nom de fonction d'exister.

Mais ne pas l’avoir ne veut pas dire que cela ne peut pas être réalisé.

PHP dispose de quatre mécanismes pour réaliser la surcharge : (par rapport à Java ci-dessous)

1 Type faible, pas besoin de définir des types de variables

Allons-y. prenons un exemple de surcharge 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);
  }
}
Copier après la connexion

Si le code ci-dessus est implémenté en langage 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
?>
Copier après la connexion

2 Paramètres facultatifs, permettant aux variables de définir des valeurs par défaut .

Exemple de surcharge 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);
  }
}
Copier après la connexion

Implémenté à l'aide de la fonctionnalité de paramètre facultatif de PHP :

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

Vous pouvez voir la même fonction, mais elle est plus simple à implémenter dans un langage faiblement typé un langage comme PHP

3. Paramètres variables

utilise principalement les deux fonctions suivantes :

  • func_num_args()Renvoyer les paramètres de la fonction Numéro

  • func_get_args()Renvoie un tableau contenant la liste des paramètres de la fonction

Méthode d'implémentation spécifique :

<?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;);
//看起来似乎通过一个接口调用
//但其实内部已经调用了各自定义的方法
?>
Copier après la connexion

4. Utiliser la méthode magique __call()

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

Lors de l'appel d'une méthode inaccessible dans un objet, __call() sera automatiquement appelé

Le paramètre $name est le nom de la méthode à appeler. Le paramètre $argument est le tableau de paramètres de la méthode appelée

La méthode d'implémentation spécifique est similaire au troisième point ci-dessus :

<?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");
?>
Copier après la connexion

Recommandations d'apprentissage gratuites associées :programmation php(vidéo)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal