Cet article présente principalement les fonctions simples de routage et de chargement automatique de classe implémentées par PHP. Il analyse les principes et les techniques d'implémentation associées du routage PHP et du chargement automatique de classe sous forme d'exemples. j'espère que cela pourra aider tout le monde.
Le répertoire du projet est le suivant
Fichier d'entrée index.php
<?php define('WEBROOT', 'C:/Users/Administrator/Documents/NetBeansProjects/test'); require_once(WEBROOT.'/core/environment.php'); core__app::run(); //
Classe de 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 ma classe ici sont par exemple core__app::run()
correspondant à la méthode run()
du répertoire racine/core/app.php, et la fonction spl_autoload_register()
est utilisée pour implémenter le chargement automatique lorsqu'un certain nom de classe est appelé, spl_autoload_register('loader::load')
sera automatiquement exécuté pour inclure 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 core__app { 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, utilisez call_user_func_array()
Méthode pour appeler la méthode dans le contrôleur
root directory/controller/test.php
<?php class controller__test { public function write($controller, $method) { //config__test::load('test'); model__test::write($controller, $method); } }
En fait, l'appel ici n'est pas nécessairement Vous devez appeler la méthode de test dans le modèle, vous pouvez ajuster n'importe quel fichier dans le répertoire du modèle. Avant cela, vous pouvez lire certains fichiers de configuration et d'autres opérations.
Répertoire racine/model/test.php
<?php class model__test { public function write($model, $method) { echo 'From controller:'.$model.' to model: ' . $model . ' ,method: ' . $method; } }
Par exemple, la requête nom d'hôte/test/écriture proviendra du fichier d'entrée et passez par core__app::run
Vous trouverez la classe contrôleur__test correspondante sous le contrôleur et exécutez la write()
méthode
Recommandations associées :
Comment implémenter un routage simple en PHP
Méthode JS pour implémenter une fonction de routeur simple
Méthode JS pour implémenter une fonction de routeur simple_compétences javascript
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!