Cette fois, je vais vous présenter le routage PHP et le chargement automatique des classes Quelles sont les précautions pour implémenter le routage et le chargement automatique des classes en PHP. Voici des cas pratiques. un regard.
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 :
Explication détaillée de la valeur de clé conservée par PHP + tableau fusionné
Installation de l'environnement Apache et PHP dans Alibaba Cloud
Comment thinkphp génère des URL selon des règles de routage
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!