PHP MVC 프레임 워 크 의 자동 로드 메커니즘 인 스 턴 스 분석
원문
실현 류 의 자동 로드 는 주로
set_include_path
와spl_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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.