So verwenden Sie die Funktion __callStatic in PHP

醉折花枝作酒筹
Freigeben: 2023-03-11 13:02:02
nach vorne
1599 Leute haben es durchsucht

Diese Situation kommt besonders häufig in Larave vor, aber während des Entwicklungsprozesses ist es offensichtlich, dass einige davon nicht statisch sind. Wenn Sie beispielsweise ein Modellbenutzer verwenden, ist es jedes Mal, wenn Sie es instanziieren, ein völlig neues Hier wird eine magische Methode __callStatic verwendet.

So verwenden Sie die Funktion __callStatic in PHP

Zum Beispiel:

<?php
class Test{
    public function __call($name, $arguments)
    {
        echo &#39;this is __call&#39;. PHP_EOL;
    }

    public static function __callStatic($name, $arguments)
    {
        echo &#39;this is __callStatic:&#39;. PHP_EOL;
    }
}

$test = new Test();
$test->hello();
$test::hi();
//this is __call:hello
//this is __callStatic:hi
Nach dem Login kopieren

Natürlich ist die Magic-Methode auch eine sehr leistungsintensive Methode. Bei jedem Aufruf wird sie nur dann aufgerufen, wenn die Klasse gescannt wird und keine Methode gefunden wird Aus Gründen der Sauberkeit und Einfachheit des Codes kann das Abstrahieren dieser Methode ebenfalls hilfreich sein, es muss jedoch ein Kompromiss zwischen ihnen bestehen. Die unten implementierte Protokollklasse übernimmt diese Methode und kann aufgerufen werden, solange sie erfüllt ist die angegebene Schnittstelle.

<?php

class Test{
    //获取 logger 的实体
    private static $logger;

    public static function getLogger(){
        return self::$logger?: self::$logger = self::createLogger();
    }

    private static function createLogger(){
        return new Logger();
    }

    public static function setLogger(LoggerInterface $logger){
        self::$logger = $logger;
    }


    public function __call($name, $arguments)
    {
        call_user_func_array([self::getLogger(),$name],$arguments);
    }

    public static function __callStatic($name, $arguments)
    {
        forward_static_call_array([self::getLogger(),$name],$arguments);
    }
}

interface LoggerInterface{
    function info($message,array $content = []);
    function alert($messge,array $content = []);
}

class Logger implements LoggerInterface {
    function info($message, array $content = [])
    {
        echo &#39;this is Log method info&#39; . PHP_EOL;
        var_dump($content);
    }

    function alert($messge, array $content = [])
    {
        echo &#39;this is Log method alert: &#39;. $messge . PHP_EOL;
    }
}


Test::info(&#39;喊个口号:&#39;,[&#39;好好&#39;,&#39;学习&#39;,&#39;天天&#39;,&#39;向上&#39;]);
$test = new Test();
$test->alert(&#39;hello&#39;);
Nach dem Login kopieren

Ausgabe:

this is Log method info
array(4) {
  [0]=>
  string(6) "好好"
  [1]=>
  string(6) "学习"
  [2]=>
  string(6) "天天"
  [3]=>
  string(6) "向上"
}
this is Log method alert: hello
Nach dem Login kopieren
Empfohlenes Lernen:

php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Funktion __callStatic in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage