解析PHP入口文件的自動加載功能

php的自動加載:php

在php5之前,咱們要用某個類或類的方法,那必須include或者require,以後才能使用,每次用一個類,都須要寫一條include,很是麻煩。php框架

後來自從php5以後,對這個需求作了改進,若是當前沒有include進來,系統能自動去找到該類,自動引進~框架

因而:__autoload()函數應運而生。

實例以下A:
 函數

index文件以下:
經過單一入口調用其餘類的方法,類不存在則會自動引入
$a=new Test(); 
function __autoload($class)
 {
    require  __DIR__.'/'.$class.'.php';

 }
注意:這是最先的方式,可是已經被廢棄,由於一個php工程可能須要依賴多個框架,
可是若是每一個框架或者工程都加載這個函數的話,就會衝突,報錯,函數重複。

後來自從5.3以後,出現了spl_autoload_register()這個函數,來進行類自動引入,,容許這個引入函數重複。ui

實例以下B:spa

spl_autoload_register('autoload');
spl_autoload_register('autoload1');
 function  autoload($class)
 {
 	require  __DIR__.'/'.$class.'.php';

 }
  function  autoload1($class)
 {
 	require  __DIR__.'/'.$class.'.php';

 }
Test3::test();
Test4::test();
//容許多個引入重複,我經過調用類,來引入多個文件,但最終都是調用一次

這2個還不夠,可是若是我若是要寫一個php框架的話,經過單一入口的方式,訪問某個類文件,那麼我該把這個函數作成一個類,作成路由,經過這個路由,來加載和使用文件。code

實例C:路由

單一入口:index.php
 <?php
 define('BASEDIR', __DIR__);
 include BASEDIR.'/IMooc/Loader.php';
 spl_autoload_register('\\IMooc\\Loader::autoload'); ?>
路由類加載類:Loader.php
<?php
namespace IMooc;
class Loader
{
	static function autoload($class)
	{
		 // echo BASEDIR.'/'.str_replace('\\','/',$class).'.php';
		//把命名空間的路徑替換成正式路徑便可
		 require  BASEDIR.'/'.str_replace('\\','/',$class).'.php';

	}
}
相關文章
相關標籤/搜索