php的自動載入機制

2022-09-23 08:54:08 字數 3409 閱讀 2123

一、php中實現自動載入的方法

使用require,include,require_once,include_once手工進行載入。

使用__autoload來進行自動載入

使用spl的autoload來實現自動載入

手工載入的實現:

當需要載入的檔案很少的時候我們可以使用第乙個來完成。這樣做很簡單也沒問題。

[php]

require_once 'a.php'; 

require_once 'b.php'; 

require_once 'c.php'; 

require_once 'a.php';

require_once 'b.php';

require_once 'c.php';

但是當需要載入檔案很多的時候這樣做還行嗎?需要寫十個,二十個require_once 或者更多的時候我們該怎麼辦?

這個時候我們可以使用__autoload方法來簡化我們的**。

__autoload載入的實現:

我們在test目錄下建立乙個in.php檔案,內容如下。

[php]

echo '我是test下面的in.php

'; echo '我是test下面的in.php

';然後在test目錄下建立乙個loader.php,內容如下。

[php]

// 需要過載__autoload方法,自定義包含類檔案的路徑    

function __autoload($classname)   

} @$test = new in(); // 執行到這裡會輸出 我是test下面的in.php 

// 需要過載__autoload方法,自定義包含類檔案的路徑 

function __autoload($classname)  }

@$test = new in(); // 執行到這裡會輸出 我是test下面的in.php沒問題,成功了!我們還可以建立其他的檔案來進行載入,但是當需要的檔案很多需要區分目錄的時候怎麼辦?

這時我們需要修改loader.php可以使用對映來找到要載入的檔案。

[php]

function __autoload($class_name)  

} new index();  

function __autoload($class_name)

}new index();

這種方法的好處就是類名和檔案路徑只是用乙個對映來維護,所以當檔案結構改變的時候,不需要修改類名,只需要將對映中對應的項修改就好了。

但是__autoload在乙個專案中只能使用一次,當你的專案引用了別人的乙個專案,你的專案中有乙個__autoload,別人的專案也有乙個__autoload,這樣兩個__autoload就衝突了.解決的辦法就是修改__autoload成為乙個,這無疑是非常繁瑣的,應用場景單一。

spl的autoload載入實現:

spl的autoload系列函式使用乙個autoload呼叫堆疊,你可以使用spl_autoload_register註冊多個自定義的autoload函式,應用場景廣泛

spl的自動載入的相關函式

spl_autoload 是_autoload()的預設實現,它會去include_path中尋找$class_name(.php/.inc) spl_autoload實現自動載入:

在test目錄下建立in.php,內容如下  

[php]

<?php  

class in  

} ?> 

<?php

class in

}?>        在test目錄下建立loader.php,內容如下

[html]

<?php  

set_include_path("/var/www/test/"); //這裡需要將路徑放入include 

spl_autoload("in"); //尋找/var/www/test/in.php 

$in = new in(); 

$in->index(); 

<?php

set_include_path("/var/www/test/"); //這裡需要將路徑放入include

spl_autoload("in"); //尋找/var/www/test/in.php

$in = new in();

$in->index();

spl_autoload_register將函式註冊到spl __autoload函式棧中,修改loader.php

[php]

function autoload($class) 

} spl_autoload_register('autoload'); 

$a = new in(); 

$a->index(); 

function autoload($class)

}spl_autoload_register('autoload');

$a = new in();

$a->index();

spl_autoload_register註冊多個自定義的autoload函式的應用

首先在test目錄下建立mods資料夾並建立inmod.mod.php內容如下:

[php]

<?php  

class inmod  } 

<?php

class inmod

}          然後在test目錄下建立libs資料夾並建立inlib.lib.php內容如下:

[php]

<?php  

class inlib  } 

<?php

class inlib

}           最後在test目錄下建立loader.php內容如下

[php]

<?php  

class loader  

} public static function libs($class)  

} } spl_autoload_register(array('loader', 'mods')); 

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

new inmod();//輸出我是mods下的in  

new inlib();//輸出我是libs下的in 

<?php

class loader

}public static function libs($class)

}}spl_autoload_register(array('loader', 'mods'));

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

new inmod();//輸出我是mods下的in

new inlib();//輸出我是libs下的in

PHP自動載入機制

自動載入機制的主要執行過程 1 檢查執行器全域性變數函式指標autoload func是否為null。2 如果autoload func null,則查詢系統中是否定義有 autoload 函式,如果沒有,則報告錯誤並退出。3 如果定義了 autoload 函式,則執行 autoload 嘗試載入類...

php 自動載入機制

一 基礎了解。1 php引入檔案使用include與require,這兩個的區別在於,include可以在 執行過程中再引入,而require是需要在 執行前就進行引入操作。2 命名空間。引入命名空間的作用是為了規避掉因為重名而引發的混亂與錯誤。可以把命名空間理解為乙個箱子,不同的箱子都可以有蘋果,...

PHP的自動載入機制

原因 我們在寫php 的時候,總會遇到這種情況 a.php需要引入 php才能正常執行 結構比較小的話,通常我們都是直接通過 include 或者 require 直接引入,如果需要引入的檔案不多的話,還可以接受,但是如果引入的檔案達到幾十個以上,再用 include 和 require 就顯得比較...