PHP 자동 로드 메커니즘 구현

3256 단어 PHP자동 로드
php 자동 로드
php 자동 적재 방법 은 두 가지 가 있 습 니 다.
첫 번 째 방안 용autoload,이 함 수 는 비교적 간단 하고 약 합 니 다.
그러나 한 가지 문제 가 해결 되 지 않 은 것 은 include 전에 파일 에 존재 하 는 지 여 부 를 판단 하 는 것 이다.

set_include_path('aa' . PATH_SEPARATOR . get_include_path());
function __autoload($className)
{
    //       ,             ,           , 
   // include     
    if (file_exists($className . '.php')) {
   include_once($className . '.php');
    } else {
        exit('no file');
    }
}
$a = new Acls();
두 번 째 방안 은 spl 로 자동 으로 불 러 옵 니 다.여기 서 구체 적 으로 이것 을 말씀 드 리 겠 습 니 다.
spl_autoload_register()
간단 한 예

set_include_path('aa' . PATH_SEPARATOR . get_include_path());
//function __autoload($className)
//{
//    if (file_exists($className . '.php')) {
//        include_once($className . '.php');
//    } else {
//        exit('no file');
//    }
//}
spl_autoload_register();
$a = new Acls();
spl_autoload_register()는 자동 으로 spl 을 호출 합 니 다.autoload()는 경로 에서 소문 자 파일 이름 을 가 진".php"프로그램 을 찾 습 니 다.기본 으로 찾 는 확장 자 는".ini"도 있 고,spl 도 사용 할 수 있 습 니 다.autoload_extensions()등록 확장자.
찾 을 수 없 는 상황 에서 도 자신의 정의 함 수 를 통 해 찾 을 수 있다.
...와 같다

function loader1($class)
{

//          

}
function loader2($class)
{
// loader1()    ,   
}
spl_autoload_register('loader1');
spl_autoload_register('loader2');
더 할 수 있어..
MVC 프레임 워 크 는 어떻게 자동 로드 를 실현 합 니까?
우선 경로 설정
$include = array('application/controllers', 'application/models', 'application/library');
set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $config['include']));
URL 을 가 져 오 는 중 컨트롤 러 와 방법 을 분석 합 니 다.
그리고 자동 로드 설정

class Loader
{
    /**
     *      
     * @param $class   
     */
    public static function autoload($class)
    {
        $path = '';
            $path = str_replace('_', '/', $class) . '.php';
        include_once($path);
    }
}
/**
 * sql    
 */
spl_autoload_register(array('Loader', 'autoload'));
경로,예화 컨트롤 러,호출 방법,당신 이 쓴 것 이 실행 되 기 시 작 했 습 니 다.

/**
 *   
 */
public function route()
{
    if (class_exists($this->getController())) {
        $rc = new ReflectionClass($this->getController());
        if ($rc->hasMethod($this->getAction())) {
            $controller = $rc->newInstance();
            $method = $rc->getMethod($this->getAction());
            $method->invoke($controller);
        } else
            throw new Exception('no action');
    } else
        throw new Exception('no controller');
}
초보적인 자동 로드 가 완료 되 었 습 니 다.
PHP 가 자동 으로 불 러 오 는 메커니즘 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 PHP 가 자동 으로 불 러 오 는 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기