ホームページ > バックエンド開発 > PHPチュートリアル > PHP MVC フレームワークのコア クラス

PHP MVC フレームワークのコア クラス

巴扎黑
リリース: 2016-11-22 14:56:58
オリジナル
1438 人が閲覧しました

PHP MVC フレームワーク コア クラス
それでは、コア フレームワークの例をいくつか挙げてみましょう: Framework/core の下に Framework.class.php ファイルを作成します。次のコードを記述します。

//framework/core/Framework.class.php
class Framework {
public static function run() {
echo "run()" }

require "framework/core/Framework.class.php";
Framework::run();
ブラウザでindex.phpにアクセスして結果を確認できます。通常、この静的メソッドの名前は run() または bootstrap() です。このメソッドでは、次の 3 つの主要なことを行う必要があります。

class Framework {
public static function run() {
// echo "run()";
self::init()
self:: autoload(); ;
self::dispatch();
}
プライベート静的関数init() {
}
プライベート静的関数dispatch() {
}
}
初期化
init()メソッド:

// 初期化

private static function init() {

// パス定数を定義

define("DS", DIRECTORY_SEPARATOR);

define("ROOT", getcwd() . DS);定義("APP_PATH", ROOT . 'アプリケーション' . DS);

define("FRAMEWORK_PATH", ROOT . "フレームワーク" . DS);
define("CONFIG_PATH", APP_PATH . "config" . DS);

define("CONTROLLER_PATH", APP_PATH . "コントローラー" . DS);

define("VIEW_PATH", APP_PATH . "ビュー" . DS);

define("CORE_PATH", FRAMEWORK_PATH . "core" . DS); ;

define("LIB_PATH", FRAMEWORK_PATH ."ライブラリ" .DS);

define("HELPER_PATH", "ヘルパー" .DS); ;

// プラットフォーム、コントローラー、アクションを定義します。例:

//index.php?p=admin&c=Goods&a=add

define("PLATFORM", isset($_REQUEST['p' ]) ? $ _REQUEST['p'] : 'ホーム');

define("コントローラー", isset($_REQUEST['c']) ? $_REQUEST['c'] : 'インデックス'); ", isset($_REQUEST['a']) ? $_REQUEST['a'] : 'index');

define("CURR_CONTROLLER_PATH", CONTROLLER_PATH . PLATFORM . DS);

define(" CURR_VIEW_PATH", VIEW_PATH . PLATFORM . DS);

require CORE_PATH .

require DB_PA TH . php";

require CORE_PATH . "Model.class.php";


// 設定ファイルをロード
$GLOBALS['config'] = include CONFIG_PATH . "config.php";
// セッションを開始
session_start( );
}
各ステップの目的はコメントで確認できます。

自動ロード
プロジェクトでは、スクリプトでクラスを使用するときに手動でロードしたり、ロードを要求したりしたくないため、PHP MVC フレームワークには自動ロード機能があります。たとえば、symfony では、lib の下にクラスをロードしたい場合、それは自動的にインポートされます。すごいですよね?次に、フレームワークに自動ロード機能を追加しましょう。

ここでは、PHP の組み込み関数 spl_autoload_register を使用します。

// 自動ロード

private static function autoload(){

spl_autoload_register(array(__CLASS__,'load'));
}

/ / カスタム ロード メソッドを定義します
private static function load($classname){

// ここでは単にアプリのコントローラーとモデル クラスを自動ロードします

if (substr($classname, -10) == "Controller"){

// コントローラー

Require_once Curr_Controller_Path. "$ ClassName.class.php";

} Elseif (Substr ($ className, -5) == "Model") "$ ClassName .class.php";
}
すべてのフレームワークには独自の命名規則があり、私たちのフレームワークも例外ではありません。コントローラー クラスの場合は、xxxController.class.php のような名前を付ける必要があり、モデル クラスの場合は、xxModel.class.php という名前を付ける必要があります。フレームワークを使用するときに、その命名規則に従う必要があるのはなぜですか?自動読み込みも理由の 1 つです。

ルーティング/ディストリビューション
// ルーティングとディスパッチ

private static functiondispatch(){

// コントローラークラスをインスタンス化し、そのアクションメソッドを呼び出します

$controller_name = "Controller" .

$action_name = ACTION . "アクション";

$controller = new $controller_name;

$controller->$action_name();
このステップでは、index.php が対応する Controller::Aciton( ) にリクエストを分配します。方法。

基本コントローラークラス
通常、フレームワークのコアクラスには基本コントローラーがあります。 symfony では sfAction と呼ばれ、iOS では UIViewController と呼ばれます。ここでは、Controller という名前を付け、framework/core の下に Controller.class.php を作成します
// Base Controller
class Controller{
// Base Controller には $loader というプロパティがあり、これは Loader class(後で紹介します)
protected $loader;
public function __construct(){
$this->loader = new Loader();
}
public function redirect($url,$message,$wait = 0){
if ( $ wait == 0) {
header ("local: $ url");
} else {
include curr_view_path. $loader、これは Loader クラスのインスタンス化です (後述)。正確に言うと、$this->loader はインスタンス化された Load クラスを指す変数です。ここではあまり説明しませんが、これは確かに非常に重要な概念です。私は、次のステートメントの後に、
$this->loader = new Loader();
$this->load がオブジェクトであると信じている PHP 開発者に会いました。いや、あくまで参考ですよ。これは Java から使用されており、Java が登場する前は、C++ および Objective C ではポインターと呼ばれていました。参照はカプセル化されたポインタ型です。たとえば、iOS (O-C) では、次のオブジェクトを作成します:
UIButton *btn = [UIButton alloc] init];
Load クラス
framework.class.php で、アプリケーション コントローラーと自動読み込みのモデルをカプセル化しました。しかし、フレームワーク ディレクトリにクラスを自動的にロードするにはどうすればよいでしょうか?これで、フレームワーク ディレクトリにクラスと関数をロードする新しい Loader クラスを作成できます。フレームワーク クラスをロードするときは、この Loader クラスのメソッドを呼び出すだけです。 OClass Loader {
// ライブラリ クラスを読み込みます
public function library ($ lib) {
include lib_path. "$ Lib.class.php" です。
public function helper($helper); HELPER_PATH を含めます。 "{$helper}_helper.php";

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