Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Schritte zur Implementierung von Routing und automatischem Laden von Klassen in PHP

Detaillierte Erläuterung der Schritte zur Implementierung von Routing und automatischem Laden von Klassen in PHP

php中世界最好的语言
php中世界最好的语言Original
2018-05-18 11:19:321466Durchsuche

Dieses Mal werde ich Ihnen die Schritte zum Implementieren von Routing und automatischem Laden von Klassen ausführlich erläutern. Was sind die Vorsichtsmaßnahmen und im Folgenden finden Sie praktische Beispiele .

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;);

Meine Klasse hier Die Laderegeln entsprechen beispielsweise der

-Methode im Stammverzeichnis/core/app.php. Die Funktion coreapp::run() wird verwendet, um das automatische Laden zu implementieren aufgerufen, run() wird automatisch ausgeführt Der Klassenname enthält die entsprechende Klassendatei. spl_autoload_register()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 verwenden Sie die Methode

, um die Methode aufzurufen der Controller

call_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 jede Datei im Modell aufrufen Zuvor können Sie einige Konfigurationsdateien usw. lesen.

Stammverzeichnis/model/test.php

<?php
class modeltest {
  public function write($model, $method) {
    echo 'From controller:'.$model.' to model: ' . $model . ' ,method: ' . $method;
  }
}

Zum Beispiel Hostname/test/write, diese Anfrage kommt aus der Eintragsdatei und nach

finden Sie die Führen Sie die entsprechende Controllertest-Klasse unter dem Controller aus und führen Sie die Methode

coreapp::run aus. Ich glaube, Sie haben die Methode beherrscht, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln zum PHP-Chinesen Webseite! write()

Empfohlene Lektüre:

Laravel-Framework-Implementierung der Suchfunktionscodeanalyse


Detaillierte Erläuterung der Schritte zur Generierung von Werbeplakaten in PHP

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Schritte zur Implementierung von Routing und automatischem Laden von Klassen in PHP. 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