Maison  >  Article  >  développement back-end  >  Code d'implémentation de la fonction PHP de routage simple et de chargement automatique de classe

Code d'implémentation de la fonction PHP de routage simple et de chargement automatique de classe

小云云
小云云original
2018-03-14 09:24:021392parcourir

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(&#39;WEBROOT&#39;, &#39;C:/Users/Administrator/Documents/NetBeansProjects/test&#39;);
require_once(WEBROOT.&#39;/core/environment.php&#39;);
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 = &#39;.php&#39;) {
    if (!$ext) {
      $ext = &#39;.php&#39;;
    }
    $file = str_replace(&#39;__&#39;, &#39;/&#39;, $name) . $ext; //类名转路径
    $path .= WEBROOT . &#39;/&#39; . $file;
    if (file_exists($path)) {
      return $path; //找到就返回
    }
    return null;
  }
}
spl_autoload_register(&#39;loader::load&#39;);

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[&#39;REQUEST_URI&#39;];
    $uri = rtrim(preg_replace(&#39;/\?.*/&#39;, &#39;&#39;, $_SERVER[&#39;REQUEST_URI&#39;]), &#39;/&#39;);
    $params = explode(&#39;/&#39;, trim($uri, &#39;/&#39;));
    $count = count($params);
    if ($count > 1) {
      $controller = $params[0];
      $method = $params[1];
    } elseif ($count == 1) {
      $controller = &#39;index&#39;;
      $method = $params[0];
    } else {
    }
    $filename = WEBROOT . &#39;/controller/&#39; . $controller . &#39;.php&#39;;
    $controller = &#39;controller__&#39;.$controller;
    try {
      if (!file_exists($filename)) {
        throw new Exception(&#39;controller &#39; . $controller . &#39; is not exists!&#39;);
        return;
      }
      include($filename);
      if (!class_exists($controller)) {
        throw new Exception(&#39;class &#39; . $controller . &#39; is not exists&#39;);
        return;
      }
      $obj = new ReflectionClass($controller);
      if (!$obj->hasMethod($method)) {
        throw new Exception(&#39;method &#39; . $method . &#39; is not exists&#39;);
        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(&#39;test&#39;);
    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 &#39;From controller:&#39;.$model.&#39; to model: &#39; . $model . &#39; ,method: &#39; . $method;
  }
}

Par exemple, la requête nom d'hôte/test/écriture proviendra du fichier d'entrée et passez par core__app::runVous 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!

Déclaration:
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