ホームページ  >  記事  >  バックエンド開発  >  PHP MVC フレームワークのコア クラス

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

巴扎黑
巴扎黑オリジナル
2016-11-08 09:48:351105ブラウズ

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

// Framework/core/Framework.class.php
class Framework {
public static function run() {
echo "run()"
}
Brotherhood Education www.lampbrother.net はこちらデモでは静的メソッド run() が作成されました。次に、エントリ ファイルindex.php を使用してテストしてみましょう。 );
ブラウザで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){

//ここでは、単にAutoLoad Appのコントローラーとモデルクラス

if(subst($ classname、-10)== "controller"){currを使用して使用を使用して使用します。 Curr- to} elseif(substr($ classname、-5)== "model"){elseifルールでも、私たちのものも例外ではありません。コントローラー クラスの場合は、xxxController.class.php のような名前を付ける必要があり、モデル クラスの場合は、xxModel.class.php という名前を付ける必要があります。フレームワークを使用するときに、その命名規則に従う必要があるのはなぜですか?自動読み込みも理由の 1 つです。

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

private static functiondispatch(){

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

$controller_name = "Controller" .

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

$controller = new $controller_name;

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

基本コントローラークラス
通常、フレームワークのコアクラスには基本コントローラーがあります。 symfony では sfAction と呼ばれ、iOS では UIViewController と呼ばれます。ここでは、Controller という名前を付け、framework/core の下に Controller.class.php を作成します
// Base Controller
class Controller{
// Base Controller には $loader というプロパティがあり、これは Loader クラス (導入済み) のインスタンスです後で)
protected $loader;
public function __construct(){
$this->loader = new Loader(); }
public function redirect($url,$message,$wait = 0){
if ( $wait == 0){
header("Location:$url");
using using - use ‐ ‐ }
}
基本コントローラーには変数 $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";

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。