ホームページ >バックエンド開発 >PHPの問題 >PHPで__callStatic関数を使用する方法

PHPで__callStatic関数を使用する方法

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-07-12 15:20:191637ブラウズ

この状況は、larave で特に一般的ですが、開発プロセス中に、これらの一部が静的ではないことは明らかです。たとえば、モデル ユーザーを使用する場合、インスタンス化するたびに、まったく新しいユーザーになります。ここではマジック メソッド __callStatic を使用します。

PHPで__callStatic関数を使用する方法

例:

<?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

もちろん、マジック メソッドも非常にパフォーマンスを重視するメソッドです。呼び出されるたびに、最初にクラスをスキャンしてください。メソッドが見つかった場合にのみ呼び出されます。このメソッドは、コードの簡潔さと抽象化にも役立ちます。これにはトレードオフが必要です。

実装されたログ クラス以下では、この A メソッドを使用し、メソッドを分離します。指定されたインターフェイスを満たす限り、メソッドを呼び出すことができます。

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

出力:

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

推奨される学習:php ビデオ チュートリアル

以上がPHPで__callStatic関数を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。