php7 はどのようにして他のフレームワークから学習し、独自のフレームワークを作成するのでしょうか?

醉折花枝作酒筹
リリース: 2023-02-18 07:38:01
転載
2006 人が閲覧しました

フレームワークの中心となるリンクは、最初のリクエストのルーティング解決からコントローラーの配布、およびモデルのデータ対話から応答までです。他のフレームワークを使用して実装すると非常に煩雑になり、多くのコンテンツが統合されすぎて、その多くは不要になるため、他のフレームワークに基づいてシンプルで実用的なフレームワークを作成しました。

php7 はどのようにして他のフレームワークから学習し、独自のフレームワークを作成するのでしょうか?

ルーティングから始めましょう:

1) ルーティング

ルーティング プロトコルのルールでは、正規表現の一致が使用されます。さまざまなリンクが分散されます。

// 第一种,使用匿名函数
App::router()->get('/', function () {
    echo "Beauty Framework.";
});
ログイン後にコピー
// 第二种,使用url分发到控制器
App::router()->post('/user/info/[0-9]+(/[0-9]+)?', 'App\Controllers\UserController@getUserInfo');
ログイン後にコピー

実装されたコア コード: (非常に単純ですか?)

if (is_string($lostrcallable) && preg_match('!^([\a-zA-Z0-9]+)\@([a-zA-Z0-9]+)$!', $lostrcallable, $matches)) {
            $class  = $matches[1];
            $method = $matches[2];

            $callable = function () use ($class, $method) {
                static $obj = null;
                if ($obj === null) {

                    $obj = new $class;
                }

                return call_user_func_array(array($obj, $method), func_get_args());
            };
        }
ログイン後にコピー

2) コントローラー

いいえ、どこにいても使用できます。要は、リクエストを処理することができます。しかし、MVC によれば、それをコントローラーに書くことが推奨されています。誰もがそう思っているので、そのまま実行してください;

3) モデル層

Dao クラスは、データベース クエリ操作のためにここに直接統合されています。現在、多くの人が MySQL を使用しているため、MySQL の通常の操作が結合されて実装されています。データベースのネイティブ操作は多くのインジェクションやその他の問題を引き起こすため、サポートはありません直接Qqueryメソッド。

4) DAO 層

読み取りと書き込みを分離する必要がある場合が多いため、それを実現するために MySQL Proxy を使用するのは面倒すぎるため、データベース クエリのサポートを実装しました。異なるSQLに従って、マスターデータベースとスレーブデータベースをそれぞれ使用します。 ######どうやってするの?

未使用のクエリ操作に応じて直接分割されており、選択クエリ操作は読み取りデータベースに直接割り当てられ、挿入、更新、および削除は書き込みデータベースに直接割り当てられます。 onMasterConnection/onSlaveConnection を使用して直接指定することもできます。

Select がどのように行われるかを見てください。この部分は実装ロジックです:

    /**
     * 获取查询内容,以数组形式返回,数据内为array。
     *
     * @access public
     * @param integer|array $limit Array to define SQL limit in format Array ($count, $offset)
     *                             or only $count
     *
     * @return mixed Array of Clients
     */
    protected function get($limit = null)
    {
        $this->dbClient->setQueryChannel($this->channel);

        $results = $this->dbClient->arrayBuilder()->get($this->dbTable, $limit, $this->fields);
        $this->_reset();

        if ($this->dbClient->count == 0) {
            return [];
        }

        return $results;
    }
ログイン後にコピー

5) 構成クラス

開発環境と本番環境は異なる構成環境を使用し、フレームワーク内で .env 環境を作成して切り替えることができます。開発と運用は構成で定期的に設定できます。どの環境が使用されるかは .env

; This is a environment configuration file
environment=development
ログイン後にコピー

で設定されます。もちろん、構成ファイルに直接設定できる公開構成情報もいくつかあります。あらゆる環境で使用できます。

// 支持使用.连接访问配置项,访问的是config/app.php中的config key
\Beauty\Core\App::config()->get("app.config");
ログイン後にコピー

6) リクエストレスポンス

Viewは必要なく、jsonデータのみを返せばよいため、Headerに直接text/jsonを記述します。 = =

その他の実装

    memcache と redis は、一貫したハッシュを使用して異なるインスタンスにアクセスします。
  • validator 検証クラス
  • 特定のコードは github https://github.com/tigerk/Beauty

にあります。以上です。他に知りたいことがあれば、ここをクリックしてください。 → →

phpビデオチュートリアル

以上がphp7 はどのようにして他のフレームワークから学習し、独自のフレームワークを作成するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!