PHP MVC框架核心類?
現(xiàn)在我們舉幾個(gè)核心框架的例子演示:在framework/core下建立一個(gè)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看到結(jié)果。通常這個(gè)靜態(tài)方法被命名為run()或者bootstrap()。在這個(gè)方法中,我們要做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();
}
在注釋中你可以看到每一步的目的。
自動(dòng)加載
在項(xiàng)目中,我們不想在腳本中想使用一個(gè)類的時(shí)候手動(dòng)的去include或者require加載,這就是為什么PHP MVC框架都有自動(dòng)加載的功能。例如,在symfony中,如果你想要加載lib下的類,它將會(huì)被自動(dòng)引入。很神奇是吧?現(xiàn)在讓我們?cè)谧约旱目蚣苤屑尤胱詣?dòng)加載的功能。
這里我們要用的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";
}
}
每一個(gè)框架都有自己的命名規(guī)則,我們的也不例外。對(duì)于一個(gè)控制器類,它需要被命名成類似xxxController.class.php,對(duì)于一個(gè)模型類,需要被命名成xxModel.class.php。為什么在使用一個(gè)框架的時(shí)候你需要遵守它的命名規(guī)則呢?自動(dòng)加載就是一條原因。
路由/分發(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將會(huì)分發(fā)請(qǐng)求到對(duì)應(yīng)的Controller::Aciton()方法中。?
基礎(chǔ)Controller類?
通常在框架的核心類中都有一個(gè)基礎(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ǔ)控制器有一個(gè)變量$loader,它是Loader類的實(shí)例化(后面介紹)。準(zhǔn)確的說,$this->loader是一個(gè)變量指向了被實(shí)例化的Load類。在這里我不過多的討論,但是這的確是一個(gè)非常關(guān)鍵的概念。我遇到過一些PHP開發(fā)者相信在這個(gè)語句之后:?
$this->loader = new Loader();?
$this->load是一個(gè)對(duì)象。不,它只是一個(gè)引用。這是從Java中開始使用的,在Java之前,在C++和Objective C中被稱為指針。引用是個(gè)封裝的指針類型。比如,在iOS(O-C)中,我們創(chuàng)建了一個(gè)對(duì)象:?
UIButton *btn = [UIButton alloc] init];?
加載類?
在framework.class.php中,我們已經(jīng)封裝好了應(yīng)用的控制器和模型的自動(dòng)加載。但是如何自動(dòng)加載在framework目錄中的類呢?現(xiàn)在我們可以新建一個(gè)Loader類,它會(huì)加載framework目錄中的類和函數(shù)。當(dāng)我們加載framework類時(shí),只需要調(diào)用這個(gè)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";?
??? }?
}

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

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?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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.

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.

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.

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é.

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.

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.

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.

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.
