中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP MVC框架中類自動加載機制的示例分析

發布時間:2021-08-05 14:04:08 來源:億速云 閱讀:158 作者:小新 欄目:開發技術

這篇文章主要介紹PHP MVC框架中類自動加載機制的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

具體如下:

原文

實現類的自動加載主要使用到了set_include_pathspl_autoload_register函數。

set_include_path用于提前設置好可能會加載的類的路徑。

spl_autoload_register用于調用相關自動加載所需類的函數,實現自動載入的功能。

有一點要注意的是:自動加載在實例化類的時候執行,也就是說使用extends繼承類的時候,是不會自動加載父類的。

設置目錄如下:

PHP MVC框架中類自動加載機制的示例分析

實現自動加載功能相關的文件有:Loader.php,config.php,boot.php,index.php

config.php

<?php
/**
 * Created by PhpStorm.
 * User: koastal
 * Date: 2016/5/15
 * Time: 10:48
 */
define("APP_PATH",__DIR__."/..");
define("Controller_PATH",__DIR__."/../controller");
define("Model_PATH",__DIR__."/../model");
define("View_PATH",__DIR__."/../view");

Loader.php

<?php
/**
 * Created by PhpStorm.
 * User: koastal
 * Date: 2016/5/15
 * Time: 12:03
 */
class Loader
{
  public static function baseLoad()
  {
    require_once("Controller.php");
    require_once("Model.php");
  }
  public static function autoload($class)
  {
    $path = $class.".class.php";
    require_once($path);
  }
}
$include = array(Controller_PATH, Model_PATH,View_PATH);
set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $include));
spl_autoload_register(array('Loader', 'autoload'));
Loader::baseLoad();

boot.php

<?php
/**
 * Created by PhpStorm.
 * User: koastal
 * Date: 2016/5/15
 * Time: 12:19
 */
require_once("Loader.php");

index.php

<?php
require_once(__DIR__."/libs/config.php");
require_once(__DIR__."/libs/boot.php");
$obj = new testController();
$obj->show();

經測試,以上代碼可用,全文完。

加更

經測試上面的代碼,在訪問不存在的控制器是會報錯,找不到相關類文件。因為我們缺少判斷相關類文件是否存在。因此,我們對Loader.php進行優化,首先掃描相關類文件是否存在,如果不存在則報錯。

<?php
/**
 * Created by PhpStorm.
 * User: koastal
 * Date: 2016/5/15
 * Time: 12:03
 */
require_once 'config.php';
class Loader
{
  public static function baseLoad()
  {
    require_once("Controller.php");
    require_once("Model.php");
  }
  public static function searchFile($filename,$path)
  {
    $filePath = false;
    $list = scandir($path);
    foreach($list as $file){
      $realPath = $path.DIRECTORY_SEPARATOR.$file;
      if(is_dir($realPath) && $file!='.' && $file!='..'){
        $res = Loader::searchFile($filename,$realPath);
        if($res){
          return $res;
        }
      }elseif($file!='.' && $file!='..'){
        if($file == $filename){
          $filePath = $realPath;
          break;
        }
      }
    }
    return $filePath;
  }
  public static function autoload($class)
  {
    $filename = $class.".class.php";
    $cflag = Loader::searchFile($filename,Controller_PATH);
    $mfalg = Loader::searchFile($filename,Model_PATH);
    $path = false;
    $path = ($cflag != false)? $cflag:$path;
    $path = ($mfalg != false)? $mfalg:$path;
    if($path == false){
      exit("Class Load Failed.");
    }else{
      require_once($path);
    }
  }
}
Loader::baseLoad();
spl_autoload_register(array('Loader', 'autoload'));

以上是“PHP MVC框架中類自動加載機制的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五华县| 石城县| 濉溪县| 揭东县| 贵定县| 璧山县| 长岭县| 宿州市| 合水县| 德化县| 瓮安县| 稷山县| 绥阳县| 凌源市| 莱州市| 广汉市| 潞城市| 延寿县| 青州市| 辉县市| 连州市| 永福县| 萨嘎县| 浪卡子县| 南和县| 建昌县| 岱山县| 项城市| 淅川县| 怀安县| 桃园市| 韶关市| 温州市| 西乌珠穆沁旗| 平和县| 左权县| 青神县| 明光市| 沁水县| 通许县| 曲松县|