一、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 就顯得比較...