php教程:autoload自動載入類_PHP教程

來源:互聯網
上載者:User
在使用PHP的OO模式開發系統時,通常大家習慣上將每個類的實現都存放在一個單獨的檔案裡,這樣會很容易實現對類進行複用,同時將來維護時也很便利。這也是OO設計的基本思想之一。在PHP5之前,如果需要使用一個類,只需要直接使用include/require將其包含進來即可

test.class.php

class abc{ 
function __construct()
{
echo 'www.hzhuti.com;
}
}
?>

load.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!”;
}
}
//定義一個類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();

http://www.bkjia.com/PHPjc/815786.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/815786.htmlTechArticle在使用PHP的OO模式開發系統時,通常大家習慣上將每個類的實現都存放在一個單獨的檔案裡,這樣會很容易實現對類進行複用,同時將來維...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.