thinkphpでファサードを達成する方法

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

コメントで理解コアコード:

<?php

//reqeuestFacade.php

    namespace facade{

        class Request extends Facade{

            public function getFacadeName(){

                return 'request';

            }

        }

    }

 

?>

 

<?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 = 'Real Request';

 

    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におけるファサードの実現方法の詳細です

より多くの情報を学び、ご覧ください。

テンセントT3-T4標準ブティックDaquanのPHPアーキテクトのチュートリアルディレクトリは、限り、あなたは読んで保証賃金は(継続的に更新された)より高いレベルに上昇します

ヘルプみんなに希望の上に、私はいくつかの情報をコンパイル上昇、を含むを開始する場所を多くのPHPerは、常に先進的な時間内にいくつかの問題やボトルネックが発生し、方向音痴は、私から知っていませんより多くのビジネスコードを書きますこれらに限定されない:分散アーキテクチャ、拡張性の高い、高性能、高同時実行、サーバーのパフォーマンスチューニング、TP6、laravel、YII2、Redisの 、Swoole、Swoft、カフカ、MySQLの最適化、シェルスクリプト、ドッカー、マイクロサービス、nginxの、など高度な乾燥品のために必要な、より高度な知識が共有への皆のための無料することができ、追加する必要が私の公式グループにここに

公開された265元の記事 ウォン称賛36 ビュー10000 +

おすすめ

転載: blog.csdn.net/weixin_43814458/article/details/105223000