鍍金池/ 問答/PHP/ use和__autoload以及spl_autoload_register的作用

use和__autoload以及spl_autoload_register的作用?

初學(xué)php有一些概念不是很明白,下面是一些我的理解:
1 . __autoload魔術(shù)方法在實例化未導(dǎo)入的類時被調(diào)用(就是一個回調(diào)函數(shù)),在這個函數(shù)中可以實現(xiàn)對類文件的包含(require);
2 . __autoload起的作用和require以及include是相似的,只是實現(xiàn)形式不同;
3 . spl_autoload_register 注冊給定的函數(shù)作為 __autoload 的實現(xiàn);

這些理解有問題么?

我在寫php代碼的時候一般使用use關(guān)鍵字導(dǎo)入要使用的類(和java、c#類似)既然可以使用use這種簡單的方式實現(xiàn)類的導(dǎo)入,為啥還要有上面這么多不同的方式來實現(xiàn)呢?而且明顯use用起來更加簡單、方便。是為了反射場景么?

回答
編輯回答
墨小羽

use是引入要使用的命名空間,方便實現(xiàn)同項目同類名的區(qū)分。真正能使用類本身的需要require/include類所在的文件,而__autoloadspl_autoload_register所做的事情是能夠?qū)崿F(xiàn)自動化引入文件等等。

2017年8月5日 12:43
編輯回答
尛曖昧

use 是引入命名空間 ,使用前 得把需要的類文件引入。

__autoload 函數(shù)可以自動引入你要使用的類文件
簡單的例子像這樣

function __autoload( $classname ) {
    include_once( "$classname.php" );
}
$product = new ShopProduct();

可以引用類。__autoload 只可以定義一次,如果需要多條 autoload 就可以使用spl_autoload_register

2017年11月27日 10:32
編輯回答
只愛你

use是引入命名空間,自動加載是按需加載,php是解釋型語言,每次請求進來都需要重新加載文件,這是主要因素。

2018年3月4日 16:25
編輯回答
互擼娃

其實還有一點問題,要仔細(xì)去看一下文檔說明.以上都是對的.我這里只說上面沒有說到的.
注冊__autoload函數(shù),只是注冊一個加載函數(shù).這個修改了php底層的加載模式.為了不修改底層的加載模式,php提出一種新的加載方式,spl_autoload_register.這個是一個函數(shù)隊列,如果理解隊列呢.就是從上往下找,直到找到為止.具體的來說,就是

* __autoload會改變底層的加載模式,而spl_autoload_register不會.
* spl_autoload_register是一個加載隊列,如果需要多條 autoload 函數(shù),spl_autoload_register滿足了此類需求

詳細(xì)的請查看一下官方文檔.

2018年5月9日 03:08
編輯回答
入她眼
2017年3月29日 13:24