thinkphp 原始碼分 3

2021-06-27 22:47:00 字數 2840 閱讀 5919

php中spl_autoload_register函式的用法

spl_autoload_register

(php 5 >= 5.1.2)

spl_autoload_register — 註冊__autoload()函式

說明bool spl_autoload_register ([ callback $autoload_function ] )

將函式註冊到spl __autoload函式棧中。如果該棧中的函式尚未啟用,則啟用它們。

如果在你的程式中已經實現了__autoload函式,它必須顯式註冊到__autoload棧中。因為

spl_autoload_register()函式會將zend engine中的__autoload函式取代為spl_autoload()或

spl_autoload_call()。 引數

autoload_function 

欲註冊的自動裝載函式。如果沒有提供任何引數,則自動註冊autoload的預設實現函式

spl_autoload()。

返回值

如果成功則返回 true,失敗則返回 false。

注:spl是standard php library(標準php庫)的縮寫。它是php5引入的乙個擴充套件庫,其主要功能包括autoload機制的實現及包括各種iterator介面或類。 spl autoload機制的實現是通過將函式指標autoload_func指向自己實現的具有自動裝載功能的函式來實現的。spl有兩個不同的函式 spl_autoload, spl_autoload_call,通過將autoload_func指向這兩個不同的函式位址來實現不同的自動載入機制。

範例設我們有乙個類檔案a.php,裡面定義了乙個名字為a的類:

<?

php

class

a

}?>

然後我們有乙個index.php需要用到這個類a,常規的寫法就是

<?

php

require

('a.php'

);

$a

=new

a();

?>

但是有乙個問題就是,假如我們的index.php需要包含的不只是類a,而是需要很多類,這樣子就必須寫很多行require語句,有時候也會讓人覺得不爽。

不過在php5之後的版本,我們就不再需要這樣做了。在php5中,試圖使用尚未定義的類時會自動呼叫__autoload函式,所以我們可以通過編寫__autoload函式來讓php自動載入類,而不必寫乙個長長的包含檔案列表。

例如在上面那個例子中,index.php可以這樣寫:

<?

php

function

__autoload

($class

)

}

$a

=new

a();

?>

當然上面只是最簡單的示範,__autoload只是去include_path尋找類檔案並載入,我們可以根據自己的需要定義__autoload載入類的規則。

此外,假如我們不想自動載入的時候呼叫__autoload,而是呼叫我們自己的函式(或者類方法),我們可以使用spl_autoload_register來註冊我們自己的autoload函式。它的函式原型如下:

bool spl_autoload_register ( [callback $autoload_function] )

我們繼續改寫上面那個例子:

<?

php

function

loader

($class

)

}

spl_autoload_register

('loader'

);

$a

=new

a();

?>

這樣子也是可以正常執行的,這時候php在尋找類的時候就沒有呼叫__autoload而是呼叫我們自己定義的函式loader了。同樣的道理,下面這種寫法也是可以的:

<?

php

class

loader

}

}

spl_autoload_register

(array

('loader'

,'loadclass'

));

$a

=new

a();?>

thinkphp原始碼解讀

thinkphp原始碼解讀 thinkphp原始碼的根目錄下是 index.php,是系統預設的 主頁,index.php中首先檢測的是 php執行環境,如果php版本小於 5.3.0則退出執行,定義是否為除錯模式,定義應用目錄,引入入口檔案。thinkphp是整個框架的入口檔案,在thinkphp...

Cartographer原始碼篇 原始碼分析 1

在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...

ThinkPHP核心類原始碼剖析

分析thinkphp原始碼中的設計模式。估計會有點讓你費解 至於第二部分的內容。我還是先寫成文章吧。1,對action類的分析 1 indexaction,otheraction表示使用者自己建立的一系列控制器,這些控制器都會繼承於action類。2 action,控制基類。他的檔案位址位於 thi...