Heim  >  Artikel  >  Backend-Entwicklung  >  Verwendung der __call()-Methode in PHP und Überladungsbeispielanalyse

Verwendung der __call()-Methode in PHP und Überladungsbeispielanalyse

伊谢尔伦
伊谢尔伦Original
2017-07-03 11:47:501899Durchsuche

1. Vorwort

Besonderer Hinweis: Obwohl die Methode call() oder callStatic() für die Implementierung von Überladung konzipiert ist, werden die beiden zum besseren Verständnis zunächst separat verstanden! ! !

Die Eigenschaften der call()-Methode sind ihre Eigenschaften, um Überladung zu implementieren. Dies sind zwei verschiedene Dinge~

2. Die call()-Methode

Nach PHP5.3.0 wurde eine callStatic()-Methode hinzugefügt. Es sind alles

magische Methoden in PHP. Bei den sogenannten magischen Methoden ruft das System zu einem bestimmten Zeitpunkt automatisch die -Methode auf! Zusätzlich zu diesen beiden gibt es in PHP noch weitere magische Methoden (siehe Handbuch). In Bezug auf magische Methoden ist mein persönliches Verständnis, dass alle magischen Methoden eines gemeinsam haben: Sie werden automatisch vom System aufgerufen. Es gibt zwei Unterschiede: den Zeitpunkt des Aufrufs und die Wirkung nach dem Aufruf Bezüglich der Aufrufzeit und Funktion von call() und callStatic() (der beliebte Punkt ist das Ergebnis nach dem Aufruf) geben Sie eine Kastanie an (der Code lautet wie folgt) Die Ausgabe ist

 

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

Durch diese Kastanie ist es nicht schwer, zwei Punkte zu erkennen

 ·Nennen Sie einen dieser Klasse innerhalb der Klasse

Unzugänglich

(

Wenn es in dieser Klasse ist, kann es nur unzugänglich sein, wenn es nicht existiert. Wenn es außerhalb dieser Klasse nicht zugänglich ist, ist es kann auch bedeuten, dass keine Zugriffsberechtigung vorliegt), egal ob die Objekt--Methode oder die statische -Methode nur die call()-Methode  · Es ist nicht möglich, ein in einer Klasse außerhalb der Klasse aufzurufen. Beim Zugriff auf die Methode von löst der Objektmodus die Methode call() und der statische Modus die Methode callStatic aus () Methode

 ps, Unzugänglichkeit bedeutet nicht nur, dass sie nicht existiert 1. Nehmen wir ein anderes Beispiel:

Die Die Ausgabe ist

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之后版本
Wenn die Methode call() oder callStatic() ausgelöst wird, übergibt das System automatisch den Methodennamen der aufgerufenen unzugänglichen Methode als ersten Parameter an call( ) oder callStatic() In der Methode wird der von der nicht vorhandenen Methode, die aufgerufen wird, übergebene Parameter als zweiter Parameter an call übergeben (und in ein Array gekapselt, d. h. jedes Element ist ein Parameter, der beim Aufruf übergeben wird). die unzugängliche Methode) () oder die callStatic()-Methode

 · Dann können Sie innerhalb der call- oder callStatic()-Methode einige Operationen basierend auf den beiden übergebenen Parametern ausführen, die mit einer Überladung verbunden sein können!

2. Ähm. . . Zum Schluss eine Kastanie geben

Die Ausgabe ist

2. Überladung

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

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

$foo=new Foo;

$foo->doStuff();

$foo->doStuff1();

Das obige ist der detaillierte Inhalt vonVerwendung der __call()-Methode in PHP und Überladungsbeispielanalyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn