Maison > Article > développement back-end > Explication détaillée des étapes pour implémenter le routage et le chargement automatique des classes en PHP
Cette fois, je vais vous apporter une explication détaillée des étapes pour implémenter le routage et le chargement automatique des classes en PHP Quelles sont les précautions et les cas suivants sont des cas pratiques. jetez un oeil.
Le répertoire du projet est le suivant
Fichier d'entréeindex.php
<?php define('WEBROOT', 'C:/Users/Administrator/Documents/NetBeansProjects/test'); require_once(WEBROOT.'/core/environment.php'); coreapp::run(); //
Classe chargement automatique du fichier environnement.php
<?php //根据类名来include文件 class loader { //找到对应文件就include static function load($name) { $file = self::filepath($name); if ($file) { return include $file; } } static function filepath($name, $ext = '.php') { if (!$ext) { $ext = '.php'; } $file = str_replace('', '/', $name) . $ext; //类名转路径 $path .= WEBROOT . '/' . $file; if (file_exists($path)) { return $path; //找到就返回 } return null; } } spl_autoload_register('loader::load');
Les règles de chargement de mes classes ici sont, par exemple, coreapp::run()
correspondant à la méthode run()
dans le répertoire racine/core/app.php La fonction spl_autoload_register()
est utilisée pour implémenter le chargement automatique When. un certain nom de classe est appelé, il sera automatiquement exécutéspl_autoload_register('loader::load')
, incluez le fichier de classe correspondant en fonction du nom de classe.
La méthode d'exécution du fichier d'entrée app.php démarre l'exécution du processus framework
<?php class coreapp { static function run() { $a = $_SERVER['REQUEST_URI']; $uri = rtrim(preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']), '/'); $params = explode('/', trim($uri, '/')); $count = count($params); if ($count > 1) { $controller = $params[0]; $method = $params[1]; } elseif ($count == 1) { $controller = 'index'; $method = $params[0]; } else { } $filename = WEBROOT . '/controller/' . $controller . '.php'; $controller = 'controller'.$controller; try { if (!file_exists($filename)) { throw new Exception('controller ' . $controller . ' is not exists!'); return; } include($filename); if (!class_exists($controller)) { throw new Exception('class ' . $controller . ' is not exists'); return; } $obj = new ReflectionClass($controller); if (!$obj->hasMethod($method)) { throw new Exception('method ' . $method . ' is not exists'); return; } } catch (Exception $e) { echo $e; //展示错误结果 return; } $newObj = new $controller(); call_user_func_array(array($newObj, $method), $params); } }
Trouvez le contrôleur correspondant en fonction de l'URI de la requête et utilisez la méthode call_user_func_array()
pour appeler le méthode dans le contrôleur
Répertoire racine/controller/test.php
<?php class controllertest { public function write($controller, $method) { //configtest::load('test'); modeltest::write($controller, $method); } }
En fait, l'appel ici ne doit pas nécessairement appeler la méthode de test dans le modèle. Vous pouvez appeler n'importe laquelle. fichier dans le répertoire modèle Vous pouvez en lire avant cela.
Répertoire racine/model/test.php
<?php class modeltest { public function write($model, $method) { echo 'From controller:'.$model.' to model: ' . $model . ' ,method: ' . $method; } }
Par exemple, la requête hostname/test/write proviendra du fichier d'entrée. Après coreapp::run
, vous trouverez le. correspondant sous la classe controller.controllertest, exécutez la méthode write()
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le. Site Web chinois PHP !
Lecture recommandée :
Mise en œuvre du framework Laravel pour l'analyse du code de la fonction de recherche
Explication détaillée des étapes pour générer des affiches de promotion en PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!