ホームページ >バックエンド開発 >PHP7 >php7 はどのようにして他のフレームワークから学習し、独自のフレームワークを作成するのでしょうか?

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

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-08-02 15:55:082074ブラウズ

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

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 サイトの他の関連記事を参照してください。

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