PHP物件導向自動載入機制原理與用法

來源:互聯網
上載者:User
這篇文章主要介紹了PHP物件導向自動載入機制原理與用法,結合執行個體形式分析了php物件導向自動載入機制的原理、相關函數及注意事項,需要的朋友可以參考下

在學習PHP的物件導向的時候,會知道很多“文法糖”,也就是魔術方法。有一個加自動載入的魔術方法,叫:__autoload();

先看一段代碼

<?phpfunction __autoload($classname) {  $filename = "./". $classname .".php";  include_once($filename);}new a();

這裡執行個體化了一個A類,但在代碼塊中沒有A類的相關代碼,按常理是應該會報錯,因為沒有找到對應的A類,但如果你使用了autoload()自動載入函數的話,結果就可以能不一樣

從上面的流程圖:在頁面執行個體化一個新類,就會先在目前的目錄找對應的類代碼,如果沒有就去autoload堆棧找對應的自動載入函數,如果有的話就自動載入該類,沒有話就拋出錯誤。

這是PHP自動載入的一個機制。然後重點在後面。如果我有多個自動載入的函數,怎麼辦!

PHP提供了一個SPL函數

spl_autoload_register(); // 註冊autoload函數

官方:spl_autoload_register() 提供了一種更加靈活的方式來實作類別的自動載入。因此,不再建議使用 __autoload() 函數,在以後的版本中它可能被棄用。

然而在PHPexecl 和 PHPWord 裡面都使用到了 這個函數來做自動載入,但兩者有區別!!

PHPexecl 自動載入的方法(這裡作者估計是Python工程師,不然花括弧都沒有,用縮排來表示)

public static function Register() {    $functions = spl_autoload_functions();    foreach ( $functions as $function)      spl_autoload_unregister($function);    $functions = array_merge(array(array('PHPExcel_Autoloader','Load')),$functions);    foreach ( $functions as $function)      $x = spl_autoload_register($function);    return $x;}

PHPWord 自動載入的方法

public static function Register() {  return spl_autoload_register(array('PHPWord_Autoloader', 'Load'));}

這兩種方法,都可以完成重定義自動載入,但有區別? 如果是獨立運行代碼,兩種情況都可以運行,但要是整合到架構中,比如YII架構。那麼PHPWord的自動載入就無效了。

因為YII架構自動帶有自動載入函數,而且再代碼啟動並執行時候就已經註冊了,而spl_autoload_register()會將新的自動載入函數,載入autoload隊列的後面。所有PHPWord在啟動並執行時候

就調用的是YII架構定義的自動載入機制,而且不是PHPWord這種載入方式。

所以反過來看PHPexecl的載入函數,你就明白了。

總結:以上就是本篇文的全部內容,希望能對大家的學習有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.