PHP에서 오버로딩을 구현하는 방법 소개

黄舟
풀어 주다: 2023-03-16 17:34:01
원래의
1642명이 탐색했습니다.

이 글에서는 주로 PHP에서 오버로딩을 구현하는 일반적인 방법을 소개합니다. PHP 오버로딩의 일반적인 구현 기술 4가지를 Java와 비교하여 분석합니다. 도움이 필요한 친구는 참고할 수 있습니다.

이 글의 예제는 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()


🎜public 혼합 __call( 문자열 $name , 배열 $arguments )🎜🎜객체에서 액세스할 수 없는 메서드를 호출할 때 __call()가 자동으로 호출됩니다🎜🎜🎜$name🎜매개변수는 호출할 메소드의 이름🎜$argument🎜매개변수는 호출된 메소드의 매개변수 배열입니다🎜🎜구체적인 구현 방법은 위의 세 번째 사항과 유사합니다. 🎜🎜🎜🎜rreee

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!