>  기사  >  백엔드 개발  >  PHP에서 __call() 메서드를 사용하는 방법 및 예제 분석 오버로딩

PHP에서 __call() 메서드를 사용하는 방법 및 예제 분석 오버로딩

伊谢尔伦
伊谢尔伦원래의
2017-07-03 11:47:501853검색

1. 서문

call()이나 callStatic() 메소드는 오버로딩을 구현하도록 설계되었지만 이해의 편의를 위해 별도로 이해해 보도록 하겠습니다. ! !

 call() 메소드의 특징은 오버로딩을 구현하는 것입니다. 둘은 서로 다릅니다~

둘째, call() 메소드

PHP5.3.0 이후에는 또 다른 callStatic()이 있었습니다. 추가된 메소드. 모두 PHP의 매직 메소드입니다. 소위 매직 메소드는 시스템이 특정 순간에 자동으로 호출하는 메소드입니다! 이 두 가지 외에도 PHP에는 다른 매직 메소드가 있습니다(매뉴얼 참조). 매직 메서드와 관련하여 제가 개인적으로 이해한 바는 각 매직 메서드에는 한 가지 공통점이 있습니다. 시스템이 자동으로 이를 호출한다는 두 가지 차이점이 있습니다. 호출 시간과 호출 후 효과

For call() 및 callStatic() 호출 시간 및 함수(인기 있는 점은 호출 후 결과) 예를 들어 (코드는 다음과 같습니다)

<?php
class A {
        public function test () {
                static::who();
                A::who();
                self::who();
                $this->who();
        }

        /**
         *私有方法
        */
        private function test2(){

        }

        public static function callStatic($a, $b) {
                var_dump(&#39;A static&#39;);
        }   
            
        public function call($a, $b) {
                var_dump(&#39;A call&#39;);
        }   
}

$a = new A;
$a->test();
A::test1();
$a->test2();
?>

 출력은

 

 이 밤나무를 통해 어렵지 않습니다. 두 가지 점을 참조하세요

 ·클래스 내부에서 호출 inaccessible(이 클래스에 있으면 존재하지 않기 때문에 액세스할 수 없고, 이 클래스 외부에서 액세스할 수 없으면 액세스할 수 없을 수도 있습니다. 접근권한) 메소드, object 메소드나 static 메소드와 상관없이 call() 메소드만 발동 가능

  ·클래스 안의 inaccessible 메소드를 클래스 외부에서 호출하면, 객체 메소드는 call() 메소드를 트리거하고, 정적 메소드는 callStatic() 메소드를 트리거합니다

  ps, 접근 불가능성은 그것이 존재하지 않는다는 것을 의미할 뿐만 아니라

 1. 또 다른 예를 들어보세요

class  MethodTest {
    public function call($name,$arguments) 
    {
         // 注意: $name 的值区分大小写
         echo "Calling object method &#39;$name&#39;的参数有多个,分别是:".implode (&#39;、&#39;,$arguments)."<br/>" ;
    }

     /**  PHP 5.3.0之后版本  */
     public static function callStatic($name,$arguments) 
    {
         // 注意: $name 的值区分大小写
         echo  "Calling static method&#39;$name&#39;的参数有多个,分别是:".implode (&#39;、&#39;,$arguments)."<br/>" ;
    }
}

 $obj=new MethodTest ;
 $obj->runTest (&#39;in object context&#39;,&#39;另外一个参数&#39;);

 MethodTest::runTest (&#39;in static context&#39;,&#39;另外一个参数&#39;);   // PHP 5.3.0之后版本

 출력은

 

 이 밤나무를 통해 두 점을 보는 것은 어렵지 않습니다

 ·call() 또는 callStatic() 메서드가 트리거되면 시스템은 첫 번째 매개 변수로 호출된 접근 불가능한 메서드의 메서드 이름을 자동으로 전달합니다. call() 또는 callStatic() 메소드를 호출하고, 존재하지 않는 메소드에 전달된 매개변수를 두 번째 매개변수로 전달합니다. (그리고 이는 배열로 캡슐화됩니다. 즉, 각 요소는 접근할 수 없는 메소드를 호출할 때 전달되는 매개변수입니다. 메소드)를 call() 또는 callStatic() 메소드로

  · 그런 다음 call 또는 callStatic() 메소드 내부에서 전달된 두 매개변수를 기반으로 몇 가지 작업을 수행할 수 있으며 이는 오버로드에 연결될 수 있습니다!

 2. 음. . . 마지막으로 밤나무를 하나 드리겠습니다.

class Foo{
        public function call($name,$arguments){

                print("你是想调用$name"."()方法吗? 额...不好意思呦,该方法不可访问!<br/>");
        }
}

$foo=new Foo;

$foo->doStuff();

$foo->doStuff1();

출력은

입니다.

위 내용은 PHP에서 __call() 메서드를 사용하는 방법 및 예제 분석 오버로딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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