第一篇中,我們提到了入口指令碼,也說了,裡面註冊了自動載入的功能
php 的自動載入是loader
類中實現的,這個類在base.php
中被引入
我們程式在這裡執行了 loader 中靜態方法 ,同時這也是乙個全部的類//base .php
// 載入loader類
require
__dir__
.'/library/think/loader.php'
;// 註冊自動載入
loader:
:register()
;
register()
我們進入loader.php
,按照上面執行順序看看其核心是什麼?
此方法行數過長,我們一點一點來分析
這就是註冊我們的自動載入函式,// 註冊系統自動載入
spl_autoload_register
($autoload?:
'think\\loader::autoload'
,true
,true
);
$autoload
這個變數是傳的引數,然而我查詢 tp5.1 原始碼,也沒有發現有任何傳參的動作。我認為是多餘的引數,直接寫'think\\loader::autoload'
就可以了。
如果不了解這個函式的同學,請看文章最頂部的那個連線,上面有詳細講解。
為了支援 composer 拓展,在自動註冊時候,把composer 也順帶一起註冊了,把$rootpath
= self:
:getrootpath()
; self:
:$composerpath
=$rootpath
.'vendor'
.directory_separator
.'composer'
.directory_separator
;// composer自動載入支援if(
is_dir
(self:
:$composerpath))
=$composerclass::
$;}}
}else
}
composer
目錄對映關係存放到prefixdirspsr4
這個靜態變數中,方便對拓展的呼叫。
這後面的**都大同小異,都是把 所需要用到的類,對映到// 註冊命名空間定義
self:
:addnamespace([
'think'
=>
__dir__
,'traits'
=>
dirname
(__dir__).
directory_separator
.'traits',]
);// 載入類庫對映檔案if(
is_file
($rootpath
.'runtime'
.directory_separator
.'classmap.php'))
// 自動載入extend目錄
self:
:addautoloaddir
($rootpath
.'extend'
);
prefixdirspsr4
這個靜態變數中。到時候方便我們使用命名空間進行呼叫。
register()
函式這裡就大概分析結束了。 接下來我們講一講autoload()
上面我們講spl_autoload_register
的時候,說他註冊了autoload()
函式,使我們在找不到類的情況下,來呼叫此函式。
我們擷取片段一點一點分析。//函式整體內容
public
static
function
autoload
($class)if
($file
= self:
:findfile
($class))
__include_file
($file);
return
true;}
}
這一段是判斷我們是否是使用了 tp5.1的if
(isset
(self:
:$classalias
[$class])
)
靜態呼叫介面(facade)
,具體解釋可以參照官方文件的解釋,這個是在base.php
的末尾註冊的
if
($file
= self:
:findfile
($class))
__include_file
($file);
return
true
;}
findfile($class)
主要功能是根據類的名稱,配合我們之前儲存對映關係的靜態陣列prefixdirspsr4
來找尋檔案的目錄。
如果找到就消除 linux 和 window 對路徑名稱的差異。(linux 嚴格區分大小寫,而win 沒有嚴格區分)
這裡主要是擔心在window環境下,路徑名稱大小寫沒分,所以我們根據linux的目錄規則重寫了檔案路徑
之後再加我們的目錄檔案
如果沒有找到,就報錯並寫入日誌
thinkphp5 1 框架鉤子和行為用法例項分析
thinkphp中的行為是乙個比較抽象的概念,可以把行為想象成在應用執行過程中的乙個動程式設計客棧作。在框架的執行流程中,例如路由檢測是乙個行為,靜態快取是乙個行為,使用者許可權檢測也是行為,大到業務邏輯,小到瀏覽器檢測 多語言檢測等等都可以當做是乙個行為,www.cppcns.com甚至說你希望給...
ThinkPHP5 1鉤子和行為
tp5.1的行為是乙個比較抽象的概念,執行的流程使用者的註冊,登入,退出登入等等都可以作為乙個行為。而不同的行為之間也具有位置共同性,比如,有些行為的作用位置在使用者註冊後,在登入之後,退出登入之後,等等有些行為的作用位置都是在應用執行前,有些行為都是在模板輸出之後,把這些行為發生作用的位置稱之為鉤...
thinkphp5 1 匯入excel檔案
public function importexcel 限制上傳 型別 ext substr strrchr files file name 1 if ext xls ext xlsx 讀取 filename files file tmp name reader iofactory createre...