php7實踐指南 ch9類與方法 自動載入

2021-10-13 08:53:52 字數 2242 閱讀 6134

9.4 自動載入

很多時候寫物件導向的應用程式時對每個類的定義建立乙個php原始檔。乙個很大的煩惱是不得不在每個指令碼開頭寫乙個長長的包含檔案列表(每個類乙個檔案),對於每乙個類檔案都需要使用require或者include引入。php中提供了兩個可用來自動載入檔案的函式__autoload()和spl_autoload_register()函式。

9.4.1 __autoload() 方法

當在**中嘗試載入未定義的類時會觸發__autoload()函式,語法如下:

void __autoload(string $class)
其中,class是待載入的類名,該函式沒有返回值。

下面演示如何使用__autoload()方法。假設有兩個檔案,分別為myclass.php和yourclass.php, myclass.php**:3

myclass.php**:

<?php

class myclass

}

yourclass.php**:

<?php

class yourclass

}

另外,在同一目錄下寫乙個autoload.php檔案,**如下:

<?php

/* *void __autoload(string $class),class是待載入的類名,該函式沒有返回值

* * */

function __autoload($name)else

}$my = new myclass();

$my->myname();

$your = new yourclass();

$your->myname();

執行autoload.php檔案,輸出結果為:

my name is chenxiaolong

your name is lixiaolong

當語句執行到$my = new myclass()和$your = new yourclass()時便會呼叫__autoload()函式,在__autoload()函式裡實現了把相應類檔案載入進來的功能。

9.4.2 spl_autoload_register() 函式

php還提供了spl_autoload_register()函式,可實現自動載入,以及註冊給定的函式作為__autoload()的實現。spl_autoload_register()函式語法如下:

spl_autoload_register([ callable$autoload_function[, bool$throw=true[, bool$prepend=false]]] ) : bool

說明:autoload_function是要註冊的自動裝載函式。若沒有提供任何引數,則自動註冊autoload的預設實現函式spl_autoload()。throw引數設定了autoload_function無法成功註冊時spl_autoload_register()是否丟擲異常,若throw為true或未設定值,則丟擲異常,為false則不丟擲。prepend如果為true,spl_autoload_register()會新增函式到佇列之首,而不是佇列尾部。

假設當前目錄下存在myclass.php和yourclass.php,並且兩個檔案中的**和上例相同,此時我們將autoload.php中的**改為如下內容:

<?php

/* *

* * */

function my_autoloader($class)

//spl_autoload_register('my_autoloader');

//自php 5.3.0起,可以使用乙個匿名函式

spl_autoload_register(function ($class));

$my = new myclass();

$my->myname();

$your = new yourclass();

$your->myname();

此時執行autoload.php,執行結果為:

my name is chenxiaolong

your name is lixiaolong

php7實踐指南 ch9類與方法 抽象類和介面

9.5 抽象類和介面 抽象類和介面都是不能被例項化的特殊類,可以在抽象類和介面中保留公共的方法,將抽象類和介面作為公共的基類。9.5.1 抽象類 abstract class class name乙個抽象類必須至少包含乙個抽象方法,抽象類中的方法不能被定義為私有的 private 因為抽象類中的方法...

php7實踐指南 ch9類與物件 類中的關鍵字

類中的關鍵字 final clone instanceof 9.6.1 final關鍵字 子類可覆寫父類中的方法,但是在有些時候並不希望父類中的方法被重寫,這時只需要在父類中的方法前加上final控制符,該方法便不能被子類重寫,否則會報錯。例如,下面的 就不是乙個合法的php指令碼 class fa...

php7實踐指南 ch19 php設計模式

設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣。專案中合理地運用設計模式可以完美地解決很多問題,每種模式在現實中都有相應的原理來與之對應,每種模式都描述了乙個在我們周圍不斷重 生的問題,以及該問題的核心解決方案,這也是設計模式能被廣泛應用的原因。19.2 工廠模式 工廠模式屬於建立型模式,提供了...