ホームページ > PHPフレームワーク > ThinkPHP > thinkphpでファサードを実装する方法

thinkphpでファサードを実装する方法

リリース: 2020-03-31 09:21:07
転載
2772 人が閲覧しました

thinkphpでファサードを実装する方法

主なアイデアは、call_user_func_array() をコンテナーと組み合わせて使用​​することです。

コア コードと理解はすべてコメントにあります:

<?php
//reqeuestFacade.php
    namespace facade{
        class Request extends Facade{
            public function getFacadeName(){
                return &#39;request&#39;;
            }
        }
    }

?>

<?php
//facade.php
namespace facade{
    class Facade{

        public static function createFacade(){
            $class = static::class; //在这个获取的$class其实是facade\reqeust
            //在这里利用static::得到getFacadeName,返回真正的request的变量名
            $facadeClass = static::getFacadeName();

            if ($facadeClass) {
                $class = $facadeClass;
            } elseif (isset(self::$bind[$class])) {
                $class = self::$bind[$class];
            }
            //echo $class;
            利用容器去获取reqeust,而不是facade\reqeust
            return \Container::get($class);
        }
    
        public static function __callStatic($method, $params)
        {
            return call_user_func_array([static::createFacade(), $method], $params);
        }
    }
}


?>
ログイン後にコピー

次のテスト コード

reqeust.php

<?php

class Request{
    public $name = &#39;Real Request&#39;;

    public  function sayName(){
        echo $this->name;
    }

}

?>
ログイン後にコピー

test.php

<?php

    use facade\Request;

    include "Container.php";
    include "Facade.php";
    include "RequestFacade.php";
    include "Request.php";

    Request::sayName();

?>
ログイン後にコピー

推奨チュートリアル: thinkphp チュートリアル

以上がthinkphpでファサードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート