php類的自動載入之連續多層次載入

2021-09-27 02:06:57 字數 2012 閱讀 9517

廢話不多說直接上描述

先看目錄結構

1.php作為主檔案。a.class.php 和b.class.php為純類檔案

<?php 

//註冊自動載入函式

spl_autoload_register(function($classname));

class abc

}echo "在1.php檔案中輸出

"; $t=new abc(); //建立abc的例項

$t->aaa(); //呼叫aaa成員方法

a.class.php 純類檔案**如下注意這裡只有類,沒有多餘的** 純類檔案無法直接執行

<?php 

class a

}

b.class.php 純類檔案**如下注意這裡只有類,沒有多餘的** 純類檔案無法直接執行

<?php 

class b

}

執行1.php得到如下輸出

出現了乙個有意思的現象,我在1.php檔案建立 class a的例項時,php的自動載入函式會將a.class.php載入,而在a.class.php的構造方法中游建立了class b的例項,這時php的自動載入函式又會將b.class.php載入。注意自動載入函式只在1.php檔案中這種現象我沒查到相關的描述,我稱之為連續的多層次載入。

注意自動載入函式需要在物件建立之前註冊,不然會找不到類,自然也無法建立類的例項 還是看下面的例子吧

首先我們改造一下1.php的**。其餘兩個類檔案照舊

改造後的1.php的原始碼如下

<?php 

class abc);

}public function aaa()

}echo "在1.php檔案中輸出

"; $t=new abc(); //建立abc的例項

$t->aaa(); //呼叫aaa成員方法

報錯,意思是找不到class a ,連class a都找不到怎麼建立它的例項暱??

注意在上面的**中我建立class abc的例項後 直接呼叫 aaa成員方法,而成員方法中建立了class a的例項,我明明在class abc中建立了自動載入函式為什麼不會自動載入呢?我在上面中提過自動載入函式需要在物件建立之前註冊,上圖報錯就是因為沒有註冊自動載入函式所造成的。因此我們在更改後的1.php中增加一行**即可(在倒數第二行增加一行**,如下所示)

<?php 

class abc);

}public function aaa()

}echo "在1.php檔案中輸出

"; $t=new abc(); //建立abc的例項

abc::autoload();//呼叫 autoload靜態方法進行註冊 注意這裡是在呼叫成員方法aaa建立 calss a物件之前。

$t->aaa(); //呼叫aaa成員方法

注意上面**的倒數第二行,增加了abc::autoload(),這一行**。這行**的作用是呼叫autoload靜態方法進行自動載入函式的註冊(注意是在類的例項化之前進行註冊),再次執行1.php 檔案。結果完美執行 如下圖

php自動載入類,PHP中類的自動載入的方法

類的自動載入是指,在外面的頁面中,並不需要去 引入 類檔案,但是程式會在需要的時候動態載入需要的類檔案。方法1 使用 autoload魔術函式 當程式需要某個類時,就會去呼叫該函式,該函式我們需要自己去定義並在其中寫好載入類檔案的通用語句。需要類是自動呼叫,而且會傳進來乙個類名,這個案例的檔名為21...

php類的自動載入

當某行 需要乙個類的時候,php的內部機制可以做到 自動載入該類檔案 以滿足該行需要乙個類的這種需求。1,new乙個物件的時候 2,使用乙個類的靜態方法的時候 3,定義乙個類 b 並以另乙個類 a 作為父類的時候 1,當需要乙個類的時候,就會自動呼叫某個函式 預設是 autoload 並傳入所需要的...

php類基礎(5)之自動載入類

測試類,要求類名與檔名一致 class test class 首先通過require之類的包含函式測試類是否可以正常使用。接著使用 autoload 和spl autoload register 分別進行自動載入類 require test class.php autoload 當我們引入乙個不存在...