PHP反射API實現自動載入

2021-07-22 12:25:56 字數 1942 閱讀 5423

php具有完整的反射 api,新增了對類、介面、函式、方法和擴充套件進行反向工程的能力。 在這裡我們通過乙個簡單的應用來展示一下反射api的魅力。

讓我們來看看如何利用反射api實現自動載入模組

首先定義乙個modules介面,不同模組實現不同的execute()功能。

inte***ce

modules

接下來定義我們在這個例子中要用到的模組(要求:每個模組中都要有set+屬性字串 方法來完成模組引數的設定,而且該方法有且僅有乙個引數,支援物件引數和字串引數)。

//郵箱模組

class

mailmodule

implements

modules

// 模組功能,開啟郵箱服務

public

function

execute

()

}// usermodule的依賴類

class

user }

//使用者配置模組

class

usermodule

implements

modules

public

function

execute

()

"; }

}

好了,定義好我們要用到的模組後,接下來定義自動載入模組類。

class

autoloadmodule

//例項化模組物件

$module = $moduleclass->newinstance();

//得到一組對應模組類的reflectionmethod物件

$methods=$moduleclass->getmethods();

//遍歷模組中的所有方法

foreach ($methods

as$method)

$this->modulelist=$module;

}}

初始化核心引擎:

public

function

initengine

(modules $module,reflectionmethod $method,$moduleconfigs)

//從方法名中獲取需要初始化的屬性(所以上文我們才對設定屬性方法的命名有要求)

$property=strtolower(substr($methodname,3));

//如果配置檔案中該配置項為空則直接返回false

if(is_null($moduleconfigs[$property]))

//如果配置項不為空,接著判斷引數型別,決定是否需要例項化依賴類

//呼叫reflectionparameter::getclass方法()獲取引數型別

$parametertype=$args[0]->getclass();

//如果是字串型別

if(is_null($parametertype))else

}//呼叫所有模組功能

public

function

run()

} }

最後我們就可以在客戶端中來使用,**如下:

//例項化這個自動載入類物件

$obj

=new autoloadmodule();

//自動載入模組並根據配置完成模組初始化工作

$obj

->init();

//然後就可以使用模組了

$obj

->run();

反射不僅可以應用在自動載入第三方控制項上,還可以幫助我們獲取關於類,方法等的詳細資訊,也可以幫助我們獲取源**和生成文件,其他使用將博主將在日後補充,今天就先簡單讓大家感受一下反射api 的用法~~

PHP 實現自動載入

自動載入主要是省去了乙個個類去 include 的繁瑣,在 new 時動態的去檢查並 include 相應的 class 檔案。先上 index.php class classautoloader else public static function register autoloader cla...

php自動載入類,php自動載入的兩種實現方法

php自動載入的兩種實現方法,需要的朋友可以參考下。php自動載方法有兩種.第一種方案用 autoload,這個函式較簡單,也較弱.但有一問題沒有解決,就是在include前判斷檔案是否存在的問題.set include path aa path separator get include path...

php 載入 php自動載入方式

本篇文章介紹的內容是關於php自動載入方式,現在分享給大家,有需要的朋友可以參考一下這篇文章的內容 php載入檔案方式 1 include,include once,requice,requice one常規載入 2 autoload 3 spl autoload register 常規載入方式 假...