亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

原文

實現(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進(jìn)行優(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)文章

  • 使用PHP求兩個文件的相對路徑

    使用PHP求兩個文件的相對路徑

    本篇文章是對使用PHP求兩個文件的相對路徑進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 簡單談?wù)?php 文件鎖

    簡單談?wù)?php 文件鎖

    PHP出現(xiàn)文件鎖與mysql表鎖有大概想的用法,就是同一時間只能讓一個人操作,這樣就避免了同時有多個人操作同一文件,這樣導(dǎo)致數(shù)據(jù)丟失的情況了,下面我來給大家介紹PHP文件鎖用法。
    2017-02-02
  • php實現(xiàn)的SSO單點登錄系統(tǒng)接入功能示例分析

    php實現(xiàn)的SSO單點登錄系統(tǒng)接入功能示例分析

    這篇文章主要介紹了php實現(xiàn)的SSO單點登錄系統(tǒng)接入功能,簡單分析了SSO單點登錄系統(tǒng)接入的原理與php相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-10-10
  • PHP實現(xiàn)單文件、多個單文件、多文件上傳函數(shù)的封裝示例

    PHP實現(xiàn)單文件、多個單文件、多文件上傳函數(shù)的封裝示例

    這篇文章主要介紹了PHP實現(xiàn)單文件、多個單文件、多文件上傳函數(shù)的封裝,結(jié)合實例形式詳細(xì)分析了php文件上傳的原理及針對文件上傳函數(shù)的封裝相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • fleaphp下不確定的多條件查詢的巧妙解決方法

    fleaphp下不確定的多條件查詢的巧妙解決方法

    在我們不確定多少條件限制的情況下,用下面的方法即可巧妙的解決
    2008-09-09
  • PHP正則表達(dá)式匹配替換與分割功能實例淺析

    PHP正則表達(dá)式匹配替換與分割功能實例淺析

    這篇文章主要介紹了PHP正則表達(dá)式匹配替換與分割功能,簡單分析了php正則匹配、替換與分割相關(guān)函數(shù),并結(jié)合實例形式演示了php正則匹配的相關(guān)操作技巧,需要的朋友可以參考下
    2017-02-02
  • PHP學(xué)習(xí)筆記 IIS7下安裝配置php環(huán)境

    PHP學(xué)習(xí)筆記 IIS7下安裝配置php環(huán)境

    PHP學(xué)習(xí)筆記 IIS7下安裝配置php環(huán)境,需要的朋友可以參考下
    2012-10-10
  • 用vscode運(yùn)行php的圖文詳解

    用vscode運(yùn)行php的圖文詳解

    這篇文章給大家介紹了使用vscode運(yùn)行php的操作步驟,文中通過圖文結(jié)合的方式介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • php反射類ReflectionClass用法分析

    php反射類ReflectionClass用法分析

    這篇文章主要介紹了php反射類ReflectionClass用法,結(jié)合實例形式較為詳細(xì)的分析了php反射類的概念、功能與具體使用方法,需要的朋友可以參考下
    2016-05-05
  • PHP源碼之explode使用說明

    PHP源碼之explode使用說明

    最近一直在想有關(guān)字符串操作的一些效率上的事情,截取字串的問題,都會避免不了重新分配空間的消耗,也順帶看了explode這個函數(shù)的源碼,理解下,拿出自己的分析共享下
    2011-08-08

最新評論