Heim >Backend-Entwicklung >PHP-Problem >So verwenden Sie die Funktion __callStatic in PHP

So verwenden Sie die Funktion __callStatic in PHP

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-07-12 15:20:191644Durchsuche

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

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

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen