在使用PHP的OO模式開發系統時,通常大家習慣上將每個類的實現都存放在一個單獨的文件里,這樣會很容易實現對類進行復用,同時將來維護時也很便利,這也是OO設計的基本思想之一,在PHP5之前,如果需要使用一個類,只需要直接使用include/require將其包含進來即可.
test.class.php,代碼如下:
- <?php
- class abc{
- function __construct()
- {
- echo 'www.49028c.com;
- }
- }
- ?>
load.php,代碼如下:
- <?php
- class LOAD
- {
- static function loadClass($class_name)
- {
- $filename = $class_name.".class.php";
- if (is_file($filename)) return include_once $filename;
- }
- }
- /**
- * 設置對象的自動載入
- * spl_autoload_register — Register given function as __autoload() implementation
- */
- spl_autoload_register(array('LOAD', 'loadClass'));
- $a = new Test();//實現自動加載,很多框架就用這種方法自動加載類
- ?>
__autoload()
在實際項目中,不可能把所有的類都寫在一個 PHP 文件中,當在一個 PHP 文件中需要調用另一個文件中聲明的類時,就需要通過 include 把這個文件引入,不過有的時候,在文件眾多的項目中,要一一將所需類的文件都 include 進來,一個很大的煩惱是不得不在每個類文件開頭寫一個長長的包含文件的列表,我們能不能在用到什么類的時候,再把這個類所在的 php 文件導入呢?
為此,PHP 提供了 __autoload() 方法,它會在試圖使用尚未被定義的類時自動調用,通過調用此函數,腳本引擎在 PHP 出錯失敗前有了最后一個機會加載所需的類.
__autoload() 方法接收的一個參數,就是欲加載的類的類名,所以這時候需要類名與文件名對應,如 Person.php,對應的類名就是 Pserson.
下面看個完整的實例,代碼如下:
- class ClassA{
- public function __construct(){
- echo “ClassA load success!”;
- }
- }
- //定義一個類ClassA,文件名為ClassA.php
- class ClassA{
- public function __construct(){
- echo “ClassA load success!”;
- }
- }
- class ClassB extends ClassA {
- public function __construct(){
- //parent::__construct();
- echo “ClassB load success!”;
- } //開源代碼Vevb.com
- }
- //定義一個類ClassB,文件名為ClassB.php,ClassB繼承ClassA
- class ClassB extends ClassA {
- public function __construct(){
- //parent::__construct();
- echo “ClassB load success!”;
- }
- }
定義兩個測試用的類之后,我們來編寫一個含有__autoload()方法的PHP運行程序文件如下,代碼如下:
- function __autoload($classname){
- $classpath=”./”.$classname.'.php';
- if(file_exists($classpath)){
- require_once($classpath);
- }
- else{
- echo ‘class file'.$classpath.'not found!';
- }
- }
- $newobj = new ClassA();
- $newobj = new ClassB();
新聞熱點
疑難解答