>  기사  >  백엔드 개발  >  PHP에서 오버로딩을 구현하는 방법은 무엇입니까?

PHP에서 오버로딩을 구현하는 방법은 무엇입니까?

coldplay.xixi
coldplay.xixi원래의
2020-11-04 14:06:403702검색

PHP에서 오버로딩을 구현하는 방법: 1. 약한 유형, 변수 유형을 정의할 필요가 없습니다. 2. 변수가 기본값을 설정할 수 있도록 허용하는 선택적 매개변수 4. 매직 메소드 [__call()]를 사용합니다.

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_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()

func_get_args()함수 매개변수 목록

특정 구현 방법:

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

4 매직 메서드를 사용하세요. __call()
공용 혼합 __call(문자열 $name , 배열 $arguments )

객체에서 액세스할 수 없는 메서드를 호출할 때 __call() code> 자동으로 호출됩니다🎜🎜$name 매개변수는 호출할 메소드의 이름입니다.$argument 매개변수는 호출되는 메소드의 매개변수 배열입니다.🎜🎜구체적인 구현 방법은 위의 세 번째 사항과 유사합니다.🎜rrreee🎜🎜관련 무료 학습 추천:🎜php 프로그래밍🎜(동영상)🎜🎜🎜

위 내용은 PHP에서 오버로딩을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.