Maison > développement back-end > Problème PHP > Comment utiliser la fonction __callStatic en php

Comment utiliser la fonction __callStatic en php

醉折花枝作酒筹
Libérer: 2023-03-11 13:02:02
avant
1643 Les gens l'ont consulté

Cette situation est particulièrement courante dans Larave, mais pendant le processus de développement, il est évident que certains d'entre eux ne sont pas statiques. Par exemple, si vous utilisez un utilisateur modèle, chaque fois que vous l'instancierez, ce sera un tout nouveau sans. s'affectant les uns les autres. Voici Une méthode magique __callStatic est utilisée.

Comment utiliser la fonction __callStatic en php

Par exemple :

<?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
Copier après la connexion

Bien sûr La méthode magique est également une méthode très gourmande en performances. Chaque fois qu'elle est appelée, elle sera appelée après avoir d'abord analysé la classe et non trouvé la méthode. Cette méthode peut également être d'une grande aide pour la netteté et l'abstraction du code. Ici, il doit y avoir un compromis entre eux

La classe de journal implémentée ci-dessous adopte cette méthode. La méthode est découplée et peut être appelée tant qu'elle répond à l'interface spécifiée

<?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;);
Copier après la connexion

Sortie :

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
Copier après la connexion

Apprentissage recommandé : tutoriel vidéo php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal