>백엔드 개발 >PHP 튜토리얼 >PHP에서 함수 및 생성자의 오버로드 예제를 구현하는 방법에 대한 자세한 설명

PHP에서 함수 및 생성자의 오버로드 예제를 구현하는 방법에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-08 09:40:301661검색

PHP는 약한 유형의 언어이므로 함수의 입력 매개변수 유형을 결정할 수 없습니다(유형 힌트는 사용할 수 있지만 정수, string와 ​​같은 스칼라 유형에는 유형 힌트를 사용할 수 없음). 예를 들어, 함수는 3개의 입력 매개변수만 정의하지만 PHP는 호출 시 4개 이상의 매개변수를 입력합니다. 따라서 이 두 가지 점을 토대로 PHP에서는 함수가 오버로드될 수 없으며(Javascript 언어와 유사) 생성자의 오버로드가 있을 수 없습니다.

함수 오버로딩을 구현하는 것은 개발 효율을 높이는 데 큰 도움이 되므로 C#이나 C++처럼 하면 좋을 것 같습니다. 실제로 PHP는 magic method, 혼합 호출(문자열 이름, 배열 인수)을 제공합니다. 이 방법은 php 매뉴얼에도 언급되어 있습니다. 공식 문서에 따르면 이 방법을 사용하면 함수 오버로딩이 가능하다고 합니다. 객체에 존재하지 않는 메소드를 호출할 경우 call() 메소드를 정의하면 해당 메소드가 호출됩니다. 예를 들어 다음 코드는

<?php
class A
{
   function call ( $name, $arguments )
    {
        echo "call调用<br/>";
        echo &#39;$name为&#39;.$name."<br/>";
        print_r ($arguments);
    }
}
(new A)->test("test","argument");
?>

실행 결과는 다음과 같습니다.

call call

$name is test

Array ( [0] => test [1] => 인수 )

그래서 필요한 것은 이 마법의 방법을 사용하려면 함수 오버로딩을 달성할 수 있습니다.

코드는 다음과 같습니다:

<?php
class A
{
     function call ($name, $args )
    {
        if($name==&#39;f&#39;)
        {
            $i=count($args);
            if (method_exists($this,$f=&#39;f&#39;.$i)) {
                call_user_func_array(array($this,$f),$args);
            }
        }
    }
    function f1($a1)
    {
        echo "1个参数".$a1."<br/>";
    }
    function f2($a1,$a2)
    {
        echo "2个参数".$a1.",".$a2."<br/>";
    }
    function f3($a1,$a2,$a3)
    {
          echo "3个参数".$a1.",".$a2.",".$a3."<br/>";
    }
}
(new A)->f(&#39;a&#39;);
(new A)->f(&#39;a&#39;,&#39;b&#39;);
(new A)->f(&#39;a&#39;,&#39;b&#39;,&#39;c&#39;);
输出如下:
1个参数a   2个参数a,b    3个参数a,b,c

마찬가지로 PHP에서는 생성자 오버로드가 유연한 방식으로만 구현될 수 있습니다. 구현의 핵심 요소는 입력 매개변수를 얻고 입력 매개변수에 따라 호출할 메소드를 결정하는 것입니다. 다음은 샘플 코드입니다.

<?php
class A
{
    function construct()
    {
        echo "执行构造函数<br/>";
$a = func_get_args(); //获取构造函数中的参数
        $i = count($a);
        if (method_exists($this,$f=&#39;construct&#39;.$i)) {
call_user_func_array(array($this,$f),$a);
        }
    }
    function construct1($a1)
    {
        echo "1个参数".$a1."<br/>";
    }
    function construct2($a1,$a2)
    {
        echo "2个参数".$a1.",".$a2."<br/>";
    }
function construct3($a1,$a2,$a3)
    {
          echo "3个参数".$a1.",".$a2.",".$a3."<br/>";
    }
}
$o = new A(&#39;a&#39;);
$o = new A(&#39;a&#39;,&#39;b&#39;);
$o = new A(&#39;a&#39;,&#39;b&#39;,&#39;c&#39;);
?>

생성자 실행
1 매개변수 a
생성자 실행
2 매개변수 a,b
생성자 실행
3 매개변수 a,b,c

그런데 c# 등. 객체 지향동일한 언어인 PHP에서는 생성자가 비공개 또는 보호로 설정된 경우 객체를 인스턴스화할 수 없습니다.

위 내용은 PHP에서 함수 및 생성자의 오버로드 예제를 구현하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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