ホームページ  >  記事  >  バックエンド開発  >  PHPは単純にルーティングを実装する Route関数

PHPは単純にルーティングを実装する Route関数

Guanhui
Guanhui転載
2020-04-30 09:41:0912633ブラウズ

ネイティブ PHP で書かれた独立した PHP フレームワークの場合、単一のエントリ ファイルを使用してパス アクセスを実現します。現時点で遭遇する主な問題は、ファイルの相互包含、次にルーティング分散です。 Web 開発に成熟した PHP フレームワークを使用しない場合、上記の 2 つの問題が非常に厄介になることがわかります。

問題解決策:

1. ファイルの内容

php にファイルをインクルードするには、require と include の 2 つの方法があります。メソッド require を使用してファイルをインクルードするときにエラーが発生すると、重大なエラーが報告され、PHP スクリプトの実行が停止します。 include を使用してファイルをインクルードするときにエラーが発生すると、警告が表示されますが、PHP スクリプトは続行されます。実行します。同時に、両方のメソッドに対応する xxx_once メソッドが含まれているため、「クラス宣言」の問題を回避できます。したがって、一般にファイルのインクルードを使用する場合は、include_once を使用してファイルをインクルードするようにします。

同時に、ファイルに含まれるパスの問題については、グローバル変数を設定する方法を使用して、エントリ ファイルの絶対パスに基づいて他のパス ファイルを見つけることができます。 php.ini の include_path パスを変更することは、もちろん別の方法です。ファイルを含めるには、require と include を使用します。相対パスの場合は、php.ini 設定ファイルの include_path 設定に従って最初に検索されます。

2. ルート配布

PHP ベースのルート配布は、基本的に、URL 内のパスを使用して対応するコントロール クラスと照合し、その中のメソッドを呼び出します。関連する操作。

何も言わずに書いたコード:

<?php
/**
 * Author:helen
 * CreateTime: 2016/07/27 10:26
 * Description:
 */
// 权限控制
include_once &#39;./auth.php&#39;;
// 应用入口文件
date_default_timezone_set("Asia/Shanghai");
header(&#39;Content-type: text/html;charset=utf-8&#39;);
// 项目根路径
define(&#39;BASEPATH&#39;, dirname(__FILE__));
// 调试模式
define(&#39;APP_DEBUG&#39;, True);
// 引入配置文件
include_once BASEPATH . &#39;/config/config.php&#39;;
// 路由控制
$router = include_once BASEPATH . &#39;/config/router.php&#39;;
if ($_SERVER[&#39;HTTP_HOST&#39;] !== &#39;xxx.com&#39;) {
    var_dump(&#39;当前host不被允许&#39;);
} else {
    $request_path = str_replace(&#39;/index.php&#39;, &#39;&#39;, $_SERVER[&#39;PHP_SELF&#39;]);
    $request_query = getCurrentQuery();
    if (array_key_exists($request_path, $router)) {
        $module_file = BASEPATH . $router[$request_path][&#39;file_name&#39;];
        $class_name = $router[$request_path][&#39;class_name&#39;];
        $method_name = $router[$request_path][&#39;method_name&#39;];
        if (file_exists($module_file)) {
            include $module_file;
            $obj_module = new $class_name();
            if (!method_exists($obj_module, $method_name)) {
                die("要调用的方法不存在");
            } else {
                if (is_callable(array($obj_module, $method_name))) {
                    $obj_module->$method_name($request_query, $_POST);
                }
            }
        } else {
            die("定义的模块不存在");
        }
    } else {
        echo &#39;页面不存在&#39;;
    }
}

上記の方法を使うと、PHPの基本フレームワークのルーティング分散が実現できます。

推奨チュートリアル: 「PHP チュートリアル

以上がPHPは単純にルーティングを実装する Route関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。