最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年09月18日 11:39:16   作者:koastal  
這篇文章主要介紹了PHP MVC框架中類的自動加載機制,結(jié)合實例形式分析了MVC框架中類的自動加載機制原理、實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下

本文實例講述了PHP MVC框架中類的自動加載機制。分享給大家供大家參考,具體如下:

原文

實現(xiàn)類的自動加載主要使用到了set_include_pathspl_autoload_register函數(shù)。

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

spl_autoload_register用于調(diào)用相關(guān)自動加載所需類的函數(shù),實現(xiàn)自動載入的功能。

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

設(shè)置目錄如下:

實現(xiàn)自動加載功能相關(guān)的文件有: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();

經(jīng)測試,以上代碼可用,全文完。

加更

經(jīng)測試上面的代碼,在訪問不存在的控制器是會報錯,找不到相關(guān)類文件。因為我們?nèi)鄙倥袛嘞嚓P(guān)類文件是否存在。因此,我們對Loader.php進行優(yōu)化,首先掃描相關(guān)類文件是否存在,如果不存在則報錯。

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

更多關(guān)于php框架相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php優(yōu)秀開發(fā)框架總結(jié)》、《codeigniter入門教程》、《ThinkPHP入門教程》、《Zend FrameWork框架入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家PHP程序設(shè)計有所幫助。

相關(guān)文章

最新評論

乌拉特前旗| 调兵山市| 昌图县| 汤原县| 清流县| 鄂尔多斯市| 深水埗区| 齐河县| 海盐县| 潼南县| 永德县| 子长县| 迁安市| 大庆市| 扶余县| 宁安市| 蒙城县| 元谋县| 南宁市| 汤阴县| 剑河县| 梅州市| 攀枝花市| 长沙县| 温州市| 科尔| 宿州市| 哈密市| 广宗县| 时尚| 保靖县| 新邵县| 明溪县| 神池县| 灵璧县| 清水河县| 望奎县| 伽师县| 昭觉县| 张家港市| 浮山县|