PHP MVC 프레임 워 크 의 자동 로드 메커니즘 인 스 턴 스 분석

4329 단어 PHPMVC자동 로드
이 사례 는 PHP MVC 프레임 워 크 의 자동 로드 체 제 를 다 루 었 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
원문
실현 류 의 자동 로드 는 주로set_include_pathspl_autoload_register함수 에 사용 되 었 다.
4.567914.불 러 올 수 있 는 클래스 의 경 로 를 미리 설정 하 는 데 사용 합 니 다.
4.567914.필요 한 클래스 를 자동 으로 불 러 오 는 함 수 를 호출 하여 자동 으로 불 러 오 는 기능 을 실현 합 니 다.
한 가지 주의해 야 할 것 은 실례 화 클래스 에 자동 으로 불 러 올 때 실행 된다 는 것 이다.즉,extends 계승 클래스 를 사용 할 때 부모 클래스 를 자동 으로 불 러 오지 않 는 다 는 것 이다.
디 렉 터 리 설정 은 다음 과 같 습 니 다.

자동 불 러 오기 기능 과 관련 된 파일 은 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 프레임 워 크 와 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.,,,,,,,,
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기