Implementierungscode für einfaches PHP-Routing und automatische Klassenladefunktion

小云云
Freigeben: 2023-03-21 10:48:01
Original
1416 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die von PHP implementierten einfachen Routing- und Klassenladefunktionen vor. Er analysiert die Prinzipien und zugehörigen Implementierungstechniken des PHP-Routings und des automatischen Klassenladens in Form von Beispielen Ich hoffe, es kann allen helfen.

Das Projektverzeichnis lautet wie folgt

Eintragsdatei 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(); //
Nach dem Login kopieren

Klasse automatisches Laden der Datei ambient.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;);
Nach dem Login kopieren

Die Laderegeln meiner Klasse hier sind zum Beispiel core__app::run() entsprechend der run()-Methode des Stammverzeichnisses/core/app.php und Die Funktion spl_autoload_register() wird verwendet, um das automatische Laden zu implementieren. Wenn ein bestimmter Klassenname aufgerufen wird, wird spl_autoload_register(&#39;loader::load&#39;) automatisch ausgeführt, um die entsprechende Klassendatei entsprechend dem Klassennamen einzuschließen.

Die Ausführungsmethode der app.php-Eintragsdatei startet die Ausführung des Framework-Prozesses


<?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);
  }
}
Nach dem Login kopieren

Suchen Sie den entsprechenden Controller gemäß der Anforderungs-URI und verwenden Sie call_user_func_array() Methode zum Aufrufen der Methode im Controller

Stammverzeichnis/controller/test.php


<?php
class controller__test {
  public function write($controller, $method) {
    //config__test::load(&#39;test&#39;);
    model__test::write($controller, $method);
  }
}
Nach dem Login kopieren

Tatsächlich ist der Aufruf hier nicht unbedingt erforderlich Um die Testmethode im Modell aufzurufen, können Sie jede Datei im Modellverzeichnis anpassen. Zuvor können Sie einige Konfigurationsdateien lesen und andere Vorgänge ausführen.

Stammverzeichnis/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;
  }
}
Nach dem Login kopieren

Zum Beispiel kommt die Hostname-/Test-/Schreibanforderung aus der Eintragsdatei und gehen Sie durch core__app::runSie finden die entsprechende Controller__Test-Klasse unter dem Controller und führen die write()Methode aus

Verwandte Empfehlungen:

So implementieren Sie einfaches Routing in PHP

JS-Methode zur Implementierung einer einfachen Router-Funktion

JS-Methode zur Implementierung einer einfachen Router-Funktion_Javascript-Fähigkeiten


Das obige ist der detaillierte Inhalt vonImplementierungscode für einfaches PHP-Routing und automatische Klassenladefunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage