php自動載入

2022-02-01 03:03:46 字數 2419 閱讀 9472

php載入檔案方式:

1、include,include_once,requice,requice_one常規載入

2、__autoload()

3、spl_autoload_register()

假設我們有乙個類檔案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()是個函式,只能存在一次。

但現在問題來了,如果在乙個系統的實現中,如果需要使用很多其它的類庫,這些類庫可能是由不同的開發人員編寫的,其類名與實際的磁碟檔案的對映規則不盡相同。這時如果要實現類庫檔案的自動載入,就必須在__autoload()函式中將所有的對映規則全部實現,這樣的話__autoload()函式有可能 會非常複雜,甚至無法實現。最後可能會導致__autoload()函式十分臃腫,這時即便能夠實現,也會給將來的維護和系統效率帶來很大的負面影響。在這種情況下,難道就沒有更簡單清晰的解決辦法了吧?答案當然是:no!

spl_autoload_register() 滿足了此類需求。 它實際上建立了 autoload 函式的佇列,按定義時的順序逐個執行。相比之下, __autoload() 只可以定義一次。

bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )
我們繼續改寫上面那個例子:

<?php   

function loader($class)

}

spl_autoload_register('loader');

$a = new a();

或者直接使用匿名函式:

<?php   

spl_autoload_register(function($file)

});

$a = new a();

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

<?php   

class loader

}

}

spl_autoload_register(array('loader', 'loadclass'));

//spl_autoload_register(array(__class__, 'loadclass'));

//spl_autoload_register(array($this, 'loadclass'));

$a = new a();

autoload.php

<?php

define('sdk_path', __dir__);

require_once sdk_path . '/common/functions.php';

require_once sdk_path . '/common/config.php';

spl_autoload_register(function ($class)

});/*

function __autoload($class)

}*/

建議入口檔案裡養成定義絕對位址sdk_path的習慣,這樣require不會出錯。

參考:

php autoload與spl_autoload自動載入機制的深入理解_php例項_指令碼之家

php 載入 php自動載入方式

本篇文章介紹的內容是關於php自動載入方式,現在分享給大家,有需要的朋友可以參考一下這篇文章的內容 php載入檔案方式 1 include,include once,requice,requice one常規載入 2 autoload 3 spl autoload register 常規載入方式 假...

php自動載入

很多開發者寫物件導向的應用程式時對每個類的定義建立乙個 php 原始檔。乙個很大的煩惱是不得不在每個指令碼 每個類乙個檔案 開頭寫乙個長長的包含檔案列表。在 php 5 中,不再需要這樣了。可以定義乙個 autoload 函式,它會在試圖使用尚未被定義的類時自動呼叫。通過呼叫此函式,指令碼引擎在 p...

php自動載入

php自動載方法有兩種.第一種方案用 autoload,這個函式較簡單,也較弱.但有一問題沒有解決,就是在include前判斷檔案是否存在的問題.1 2 3 4 5 6 7 8 9 10 11 12 13 set include path aa path separator get include ...