Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert Routing und automatisches Laden von Klassen

PHP implementiert Routing und automatisches Laden von Klassen

php中世界最好的语言
php中世界最好的语言Original
2018-03-24 17:54:031622Durchsuche

Dieses Mal zeige ich Ihnen das PHP-Routing und das automatische Laden von Klassen. Was sind die Vorsichtsmaßnahmen für die Implementierung des Routings und des automatischen Ladens von Klassen? einmal einen Blick.

Das Projektverzeichnis lautet wie folgt

Eintragsdateiindex.php

<?php
define(&#39;WEBROOT&#39;, &#39;C:/Users/Administrator/Documents/NetBeansProjects/test&#39;);
require_once(WEBROOT.&#39;/core/environment.php&#39;);
coreapp::run(); //

Klasse automatisches Laden der Datei Environment.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;);

Die Laderegeln für meine Klassen entsprechen beispielsweise der coreapp::run() -Methode im Stammverzeichnis/core/app.php. Die Funktion run() wird verwendet, um das automatische Laden zu implementieren Wenn ein bestimmter Klassenname aufgerufen wird, wird er automatisch ausgeführt. spl_autoload_register() Fügen Sie die entsprechende Klassendatei entsprechend dem Klassennamen ein. spl_autoload_register(&#39;loader::load&#39;)

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

<?php
class coreapp {
  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 = '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);
  }
}
Suchen Sie den entsprechenden Controller gemäß der Anforderungs-URI und rufen Sie ihn mit der Methode

auf Methode im Controllercall_user_func_array()

Stammverzeichnis/controller/test.php

<?php
class controllertest {
  public function write($controller, $method) {
    //configtest::load('test');
    modeltest::write($controller, $method);
  }
}
Tatsächlich muss der Aufruf hier nicht unbedingt die Testmethode im Modell aufrufen. Sie können eine beliebige aufrufen Datei im Modellverzeichnis. Sie können einige Konfigurationsdateien und andere Vorgänge lesen.

Stammverzeichnis/model/test.php

<?php
class modeltest {
  public function write($model, $method) {
    echo 'From controller:'.$model.' to model: ' . $model . ' ,method: ' . $method;
  }
}
Zum Beispiel kommt die Anfrage hostname/test/write aus der Eintragsdatei. Nach

finden Sie die Führen Sie die entsprechende coreapp::run-Methode write()

unter der Controller-Klasse aus. Weitere spannende Informationen finden Sie in den anderen verwandten Artikeln PHP chinesische Website!

Empfohlene Lektüre:

Detaillierte Erklärung des von PHP beibehaltenen Schlüsselwerts + zusammengeführten Arrays

Installation der Apache- und PHP-Umgebung in Alibaba Cloud

Wie thinkphp URLs gemäß Routing-Regeln generiert

Das obige ist der detaillierte Inhalt vonPHP implementiert Routing und automatisches Laden von Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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