目次
自己の PHP 架台の注意(一),架橋 php 架台の注意
はじめに
フレームワーク全体
名前空間と自動読み込み
路由选择
后续
ホームページ バックエンド開発 PHPチュートリアル 独自の PHP フレームワークの構築経験 (1)、PHP フレームワークの構築経験_PHP チュートリアル

独自の PHP フレームワークの構築経験 (1)、PHP フレームワークの構築経験_PHP チュートリアル

Jul 12, 2016 am 08:55 AM
php

自己の PHP 架台の注意(一),架橋 php 架台の注意

はじめに

PHP 用の MVC フレームワークを書くことになると、誰もが最初に思い浮かべる言葉は「ホイールを作る」ということでしょう。深いスキルを持たないプログラマーは、マスターが書いた PHP フレームワークほど優れたものではないでしょう。 . 時間とさまざまなプロジェクトによってテストされてきたフレームワーク。それでも準備をして実行したのは、主な理由:

  • PHP のすべての側面を理解しているつもりですが、PHP を学習してまだ日が浅く、よく使用される多くの関数のパラメーターや一部の関数については、時々マニュアルを確認する必要があります。名前空間、リフレクションなどの PHP の新しい機能。簡単に見ただけで、実際には適用していません。
  • PHP は多くの知識を持ち、複雑です。通常のプロジェクトは主にビジネス ロジック コードであり、フレームワークはこれらの知識を統合できるプロジェクトです。
  • 自分でフレームワークを書くときは、TP/CI/YII など、これまでに使用したフレームワークのソース コードも参照します。ソース コードを見ると、フレームワークを理解するのにも役立ちます。将来使いたいフレームワークを受け入れやすくなります。

ということで、今回のホイール作りの目的はホイールを作ることではなく、ホイールの作り方に慣れ、ホイールの特徴をまとめ、ホイールをより良く使うことです。

完全な PHP フレームワークの作成について話す場合、デザイン パターン、イテレータ、イベント、フックなどの多くの PHP 知識ポイントと、多くの基本知識の柔軟な適用を習得する必要があります。これらを完全に制御することはできないと思うので、まずは自分でスケルトンを構築し、さまざまな PHP フレームワークの特性を参照して、徐々に改善していくステップです。仕事の都合上、アルゴリズムやネットワークなどのプログラミングの基礎を夜に習得する必要があるため、PHP フレームワーク部分を更新する時間が週末しかない場合があります。使用したナレッジ ポイントをまとめ、フレームワークの更新後にブログ記事を更新します。機能。

まずフレームワークの現在のソースコードを置きます: GITHUB/zhenbianshu


フレームワーク全体

まず、PHP の MVC フレームワークのワークフローを要約します。

簡単に言えば、エントリファイルを使用してリクエストを受け入れ、ルートを選択し、リクエストを処理し、結果を返します。

もちろん、たった数文でまとめたものでも、実際には多くの作業が必要です。PHP フレームワークは、リクエストを受け取るたびに定数を定義し、設定ファイルと基本クラスを読み込み、アクセスされた URL に基づいて論理的な判断を行い、対応する (モジュール) コントローラーとメソッドを呼び出し、対応するクラスを自動的にロードします。リクエストの処理後、フレームワークは対応するテンプレート ファイルを選択してレンダリングし、HTML ページの形式で応答を返します。ロジックを処理するときは、エラーと例外の処理も考慮する必要があります。

1. MVC フレームワークとして、全体の状況を制御するための固有のエントリー ファイルが必要です。すべてのアクセス要求は、フレームワークのルート ディレクトリにあるindex.php などのこのエントリー ファイルに最初に入力します。基本フォルダー パス、現在の環境に基づいてエラー レポートのレベルを定義します。

2. PHP で別のファイルをロードするには、require と include を使用します。これらは両方とも、ターゲット ファイルの内容を現在のファイルにロードし、require ステートメントを置き換えて、ロード時に実行されます。必要なときに実行され、毎回実行されます。これらの _once 構造はすべて、複数回書き込まれた場合に 1 回だけ実行されることを意味します。

3. フレームワーク内の設定変数は、専用の設定ファイルを使用して保存されます。ここでは、TP の配列の戻りメソッドを模倣し、compileConf() 関数を使用して配列を解析し、配列のキーを定数として定義します。配列の値として。

リーリー

名前空間と自動読み込み

なぜ名前空間と自動読み込みを組み合わせるのですか?

PHPプロジェクトでは、クラスが多い場合、クラス名が重複すると混乱が生じますし、同じフォルダ内に同じ名前のファイルが存在できないので、この時に名前空間とフォルダが一緒に活躍します。私の理解では、フォルダーは 1 つずつのボックスであり、名前空間はラベルのようなもので、ボックスはラベルに対応します。クラスを定義するときは、さまざまなクラスを異なるボックスに入れ、対応するラベルを付けます。クラスを自動的にロードする場合、ラベル (名前空間) に基づいて対応するボックス (フォルダー) を簡単に見つけ、対応するクラス ファイルを見つけることができます。

クラスの自動ロードに関しては、__autoload() マジック関数が知られています。これは、現在のパスに見つからないオブジェクトをインスタンス化するときに、渡されたクラス名に従って、対応するクラス ファイルが自動的に呼び出されます。関数本体にロードされます。

现在我们多用spl_autoload_register()函数,它可以注册多个函数来代替__autoload函数的功能,我们传入一个函数名为参数,spl_autoload_register会将这个函数压入栈中,在实例化一个当前路径内找不到的类时,系统将会将函数出栈依次调用,直到实例化成功。

<code>spl_autoload_register('Sqier\Loader::autoLoad');

class Loader {
public static function autoLoad($class) {
    //如果有的话,去除类最左侧的\
    $class = ltrim($class, '\\');
    //获取类的路径全名
    $class_path = str_replace('\\', '/', $class) . EXT;
    if (file_exists(SYS_PATH . $class_path)) {
        include SYS_PATH . $class_path;
        return;
    }
    if (file_exists(APP_PATH . $class_path)) {
        include APP_PATH . $class_path;
        return;
    }
}
</code>
ログイン後にコピー

现在Loader类还是一个简单的类,待以后慢慢完善。


路由选择

接下来就是路由选择了,其本质是根据当前定义的全局URL模式选择合适的方法来分析传入的URI,加载对应的类,并实现对应的方法。

<code>class Router {
public static $uri;

public static function bootstrap() {
    self::$uri = $_SERVER['REQUEST_URI'];
    switch (URL_MODE) {
        case 1: {
            self::rBoot();
            break;
        }
        default: {
            self::rBoot();
        }
    }
}

public static function rBoot() {
    $router = isset($_GET['r']) ? explode('/', $_GET['r']) : [
        'index',
        'index'
    ];
    $cName = 'Controller\\' . ucfirst($router[0]);
    $aName = isset($router[1]) ? strtolower($router[1]) . 'Action' : 'indexAction';
    $controller = new $cName();
    $controller->$aName();
    }
}
</code>
ログイン後にコピー

这样,我在地址栏输入 zbs.com/index.php?r=index/login 后,系统会自动调用/app/Controller/Index.php下的login方法。完成了这么一个简单的路由。


后续

接下来我会优化现有的工具类,添加显示层,添加数据库类,还会将一些别的框架里非常cool的功能移植进来~

待续...

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1114479.htmlTechArticle搭建自己的PHP框架心得(一),搭建php框架心得 前言 说到写PHP的MVC框架,大家想到的第一个词--造轮子,是的,一个还没有深厚功力的程序...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

See all articles