国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

PHP MVC框架核心類

Nov 08, 2016 am 09:48 AM
cadre

PHP MVC框架核心類?
現(xiàn)在我們舉幾個核心框架的例子演示:在framework/core下建立一個Framework.class.php的文件。寫入以下代碼:?

// framework/core/Framework.class.php?
class Framework {?
?? public static function run() {?
?????? echo "run()";?
?? }?
兄弟連教育www.lampbrother.net在這個演示中創(chuàng)建了一個靜態(tài)方法run(),現(xiàn)在讓我們通過入口文件index.php測試一下:?

require "framework/core/Framework.class.php";?
Framework::run();?
你可以在你的瀏覽器里訪問index.php看到結(jié)果。通常這個靜態(tài)方法被命名為run()或者bootstrap()。在這個方法中,我們要做3件最主要的事情:?

class Framework {?
?? public static function run() {?
//??????? echo "run()";?
?????? self::init();?
?????? self::autoload();?
?????? self::dispatch();?
?? }?
?? private static function init() {?
?? }?
?? private static function autoload() {?
?? }?
?? private static function dispatch() {?
?? }?
}?
初始化?
init()方法:?

// Initialization?

private static function init() {?

??? // Define path constants?

??? define("DS", DIRECTORY_SEPARATOR);?

??? define("ROOT", getcwd() . DS);?

??? define("APP_PATH", ROOT . 'application' . DS);?

??? define("FRAMEWORK_PATH", ROOT . "framework" . DS);?

??? define("PUBLIC_PATH", ROOT . "public" . DS);?

??? define("CONFIG_PATH", APP_PATH . "config" . DS);?

??? define("CONTROLLER_PATH", APP_PATH . "controllers" . DS);?

??? define("MODEL_PATH", APP_PATH . "models" . DS);?

??? define("VIEW_PATH", APP_PATH . "views" . DS);?

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

??? define('DB_PATH', FRAMEWORK_PATH . "database" . DS);?

??? define("LIB_PATH", FRAMEWORK_PATH . "libraries" . DS);?

??? define("HELPER_PATH", FRAMEWORK_PATH . "helpers" . DS);?

??? define("UPLOAD_PATH", PUBLIC_PATH . "uploads" . DS);?

??? // Define platform, controller, action, for example:?

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

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

??? define("CONTROLLER", isset($_REQUEST['c']) ? $_REQUEST['c'] : 'Index');?

??? define("ACTION", isset($_REQUEST['a']) ? $_REQUEST['a'] : 'index');?

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

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

??? // Load core classes?

??? require CORE_PATH . "Controller.class.php";?

??? require CORE_PATH . "Loader.class.php";?

??? require DB_PATH . "Mysql.class.php";?

??? require CORE_PATH . "Model.class.php";?


??? // Load configuration file?
??? $GLOBALS['config'] = include CONFIG_PATH . "config.php";?
??? // Start session?
??? session_start();?
}?
在注釋中你可以看到每一步的目的。?

自動加載?
在項目中,我們不想在腳本中想使用一個類的時候手動的去include或者require加載,這就是為什么PHP MVC框架都有自動加載的功能。例如,在symfony中,如果你想要加載lib下的類,它將會被自動引入。很神奇是吧?現(xiàn)在讓我們在自己的框架中加入自動加載的功能。?

這里我們要用的PHP中的自帶函數(shù)spl_autoload_register:?

// Autoloading?

private static function autoload(){?

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

// Define a custom load method?
private static function load($classname){?

??? // Here simply autoload app’s controller and model classes?

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

??????? // Controller?

??????? require_once CURR_CONTROLLER_PATH . "$classname.class.php";?

??? } elseif (substr($classname, -5) == "Model"){?

??????? // Model?

??????? require_once? MODEL_PATH . "$classname.class.php";?
??? }?
}?
每一個框架都有自己的命名規(guī)則,我們的也不例外。對于一個控制器類,它需要被命名成類似xxxController.class.php,對于一個模型類,需要被命名成xxModel.class.php。為什么在使用一個框架的時候你需要遵守它的命名規(guī)則呢?自動加載就是一條原因。?

路由/分發(fā)?
// Routing and dispatching?

private static function dispatch(){?

??? // Instantiate the controller class and call its action method?

??? $controller_name = CONTROLLER . "Controller";?

??? $action_name = ACTION . "Action";?

??? $controller = new $controller_name;?

??? $controller->$action_name();?

}?
在這步中,index.php將會分發(fā)請求到對應(yīng)的Controller::Aciton()方法中。?

基礎(chǔ)Controller類?
通常在框架的核心類中都有一個基礎(chǔ)的控制器。在symfony中,被稱為sfAction;在iOS中,被稱為UIViewController。在這里我們命名為Controller,在framework/core下建立Controller.class.php?
// Base Controller?
class Controller{?
??? // Base Controller has a property called $loader, it is an instance of Loader class(introduced later)?
??? protected $loader;?
??? public function __construct(){?
??????? $this->loader = new Loader();?
??? }?
??? public function redirect($url,$message,$wait = 0){?
??????? if ($wait == 0){?
??????????? header("Location:$url");?
??????? } else {?
??????????? include CURR_VIEW_PATH . "message.html";?
??????? }?
??????? exit;?
??? }?
}?
基礎(chǔ)控制器有一個變量$loader,它是Loader類的實例化(后面介紹)。準確的說,$this->loader是一個變量指向了被實例化的Load類。在這里我不過多的討論,但是這的確是一個非常關(guān)鍵的概念。我遇到過一些PHP開發(fā)者相信在這個語句之后:?
$this->loader = new Loader();?
$this->load是一個對象。不,它只是一個引用。這是從Java中開始使用的,在Java之前,在C++和Objective C中被稱為指針。引用是個封裝的指針類型。比如,在iOS(O-C)中,我們創(chuàng)建了一個對象:?
UIButton *btn = [UIButton alloc] init];?
加載類?
在framework.class.php中,我們已經(jīng)封裝好了應(yīng)用的控制器和模型的自動加載。但是如何自動加載在framework目錄中的類呢?現(xiàn)在我們可以新建一個Loader類,它會加載framework目錄中的類和函數(shù)。當我們加載framework類時,只需要調(diào)用這個Loader類中的方法即可。?
class Loader{?
??? // Load library classes?
??? public function library($lib){?
??????? include LIB_PATH . "$lib.class.php";?
??? }?
??? // loader helper functions. Naming conversion is xxx_helper.php;?
??? public function helper($helper){?
??????? include HELPER_PATH . "{$helper}_helper.php";?
??? }?
}

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment évaluer la rentabilité du support commercial des frameworks Java Comment évaluer la rentabilité du support commercial des frameworks Java Jun 05, 2024 pm 05:25 PM

L'évaluation du rapport co?t/performance du support commercial pour un framework Java implique les étapes suivantes : Déterminer le niveau d'assurance requis et les garanties de l'accord de niveau de service (SLA). L’expérience et l’expertise de l’équipe d’appui à la recherche. Envisagez des services supplémentaires tels que les mises à niveau, le dépannage et l'optimisation des performances. évaluez les co?ts de support commercial par rapport à l’atténuation des risques et à une efficacité accrue.

Comparaison des performances des frameworks Java Comparaison des performances des frameworks Java Jun 04, 2024 pm 03:56 PM

Selon les benchmarks, pour les petites applications hautes performances, Quarkus (démarrage rapide, mémoire faible) ou Micronaut (TechEmpower excellent) sont des choix idéaux. SpringBoot convient aux grandes applications full-stack, mais a des temps de démarrage et une utilisation de la mémoire légèrement plus lents.

Comment la courbe d'apprentissage des frameworks PHP se compare-t-elle à celle d'autres frameworks de langage?? Comment la courbe d'apprentissage des frameworks PHP se compare-t-elle à celle d'autres frameworks de langage?? Jun 06, 2024 pm 12:41 PM

La courbe d'apprentissage d'un framework PHP dépend de la ma?trise du langage, de la complexité du framework, de la qualité de la documentation et du support de la communauté. La courbe d'apprentissage des frameworks PHP est plus élevée par rapport aux frameworks Python et inférieure par rapport aux frameworks Ruby. Par rapport aux frameworks Java, les frameworks PHP ont une courbe d'apprentissage modérée mais un temps de démarrage plus court.

Comment les options légères des frameworks PHP affectent-elles les performances des applications?? Comment les options légères des frameworks PHP affectent-elles les performances des applications?? Jun 06, 2024 am 10:53 AM

Le framework PHP léger améliore les performances des applications grace à une petite taille et une faible consommation de ressources. Ses fonctionnalités incluent : une petite taille, un démarrage rapide, une faible utilisation de la mémoire, une vitesse de réponse et un débit améliorés et une consommation de ressources réduite. Cas pratique : SlimFramework crée une API REST, seulement 500 Ko, une réactivité élevée et un débit élevé.

Bonnes pratiques en matière de documentation du framework Golang Bonnes pratiques en matière de documentation du framework Golang Jun 04, 2024 pm 05:00 PM

La rédaction d'une documentation claire et complète est cruciale pour le framework Golang. Les meilleures pratiques incluent le respect d'un style de documentation établi, tel que le Go Coding Style Guide de Google. Utilisez une structure organisationnelle claire, comprenant des titres, des sous-titres et des listes, et fournissez la navigation. Fournit des informations complètes et précises, notamment des guides de démarrage, des références API et des concepts. Utilisez des exemples de code pour illustrer les concepts et l'utilisation. Maintenez la documentation à jour, suivez les modifications et documentez les nouvelles fonctionnalités. Fournir une assistance et des ressources communautaires telles que des problèmes et des forums GitHub. Créez des exemples pratiques, tels que la documentation API.

Comment choisir le meilleur framework Golang pour différents scénarios d'application Comment choisir le meilleur framework Golang pour différents scénarios d'application Jun 05, 2024 pm 04:05 PM

Choisissez le meilleur framework Go en fonction des scénarios d'application?: tenez compte du type d'application, des fonctionnalités du langage, des exigences de performances et de l'écosystème. Frameworks Go courants : Gin (application Web), Echo (service Web), Fibre (haut débit), gorm (ORM), fasthttp (vitesse). Cas pratique : construction de l'API REST (Fiber) et interaction avec la base de données (gorm). Choisissez un framework?: choisissez fasthttp pour les performances clés, Gin/Echo pour les applications Web flexibles et gorm pour l'interaction avec la base de données.

Feuille de route d'apprentissage du framework Java?:?meilleures pratiques dans différents domaines Feuille de route d'apprentissage du framework Java?:?meilleures pratiques dans différents domaines Jun 05, 2024 pm 08:53 PM

Feuille de route d'apprentissage du framework Java pour différents domaines : Développement Web : SpringBoot et PlayFramework. Couche de persistance?: Hibernate et JPA. Programmation réactive c?té serveur : ReactorCore et SpringWebFlux. Informatique temps réel : ApacheStorm et ApacheSpark. Cloud computing?: AWS SDK pour Java et Google Cloud Java.

Quels sont les malentendus courants dans le processus d'apprentissage du framework Golang?? Quels sont les malentendus courants dans le processus d'apprentissage du framework Golang?? Jun 05, 2024 pm 09:59 PM

Il existe cinq malentendus dans l'apprentissage du framework Go?: une dépendance excessive à l'égard du framework et une flexibilité limitée. Si vous ne respectez pas les conventions du framework, le code sera difficile à maintenir. L'utilisation de bibliothèques obsolètes peut entra?ner des problèmes de sécurité et de compatibilité. L'utilisation excessive de packages obscurcit la structure du code. Ignorer la gestion des erreurs entra?ne un comportement inattendu et des plantages.

See all articles