>  기사  >  백엔드 개발  >  PHP는 여러 개의 생성된 메서드를 사용합니다.

PHP는 여러 개의 생성된 메서드를 사용합니다.

小云云
小云云원래의
2018-03-21 11:13:321414검색

PHP가 다중 생성자를 정의할 수 없는 이유는 PHP가 약한 유형의 언어이기 때문에 함수의 입력 매개변수 유형을 결정할 수 없기 때문입니다(유형 힌트를 사용할 수 있지만 정수 및 문자열과 같은 스칼라에는 유형 힌트를 사용할 수 없습니다). type), 예를 들어 함수의 경우 입력 매개변수가 3개만 정의되어 있지만 PHP는 호출 시 매개변수를 4개 이상 입력합니다. 따라서 이 두 가지 점을 토대로 PHP에서는 (Javascript 언어와 유사) 함수가 오버로드될 수 없고 생성자에 대한 오버로드가 있을 수 없게 됩니다.

PHP의 구성 방법은 Java와 다릅니다. 여러 구성 방법이 있을 수 없으며 Java와 유사한 구성 방법을 구현하려면 다음 방법을 사용하면 됩니다.

[ php] view plain copy

  1. //PHP构造方法使用
    class Test{  
        function __construct(){  
            echo &#39;Test类无参构造方法被调用<br/>&#39;;  
            $a=func_get_args();  
            $i=func_num_args();  
            //判断Test类是否有__constructxx方法,将方法名记为$f
            if(method_exists($this,$f=&#39;__construct&#39;.$i)){  
                //若存在xx方法,使用call_user_func_array(arr1,arr2)函数调用他,该函数的参数为两个数组,前面的数组为调用谁($this)的什么($f)方法,后一个数组为参数
                call_user_func_array(array($this,$f),$a);  
            }  
        }  
        function __construct1($a1){  
            echo &#39;Test类1个参数的仿构造方法被调用<br/>&#39;;  
            //输出参数值
            echo &#39;其值为:&#39;.$a1.&#39;<br/><br/>&#39;;  
        }  
        function __construct2($a1,$a2){  
            echo &#39;Test类2个参数的仿构造方法被调用<br/>&#39;;  
            echo &#39;其值为:&#39;.$a1.&#39;、&#39;.$a2.&#39;<br/><br/>&#39;;  
        }  
        function __construct3($a1,$a2,$a3){  
            echo &#39;Test类3个参数的仿构造方法被调用<br/>&#39;;  
            echo &#39;其值为:&#39;.$a1.&#39;、&#39;.$a2.&#39;、&#39;.$a3.&#39;<br/><br/>&#39;;  
        }  
    }  
    //测试
    new Test(&#39;你&#39;);  
    new Test(&#39;你&#39;,&#39;好&#39;);  
    new Test(&#39;你&#39;,&#39;好&#39;,&#39;啊&#39;);


테스트 결과는 다음과 같습니다.


관련 권장 사항:

PHP 언어 생성자에 대한 자세한 설명

js 일반 함수 및 생성자에 대한 자세한 설명

JavaScript 생성자 패턴 예제 분석

위 내용은 PHP는 여러 개의 생성된 메서드를 사용합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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