我正在嘗試做一些「花哨」/「實驗」php,以便您可以包含一個頭文件腳本(稱爲crt0:-p),它定義了一個基本應用程序你可以繼承的類。所有腳本處理完成後調用方法
然後它提供了一個函數,它檢查你的類並找到一個子類化它的應用程序類並調用「Main」函數。通過這種方式,您可以包含頭文件,創建一個類,該類將子類化爲默認的應用程序類,並確保您提供了一個靜態主函數,並且瞧 - 你的應用程序在主函數內部奇蹟般地拾取(類似於java/c#等等,有很多預定義應用程序功能)。
我唯一的問題是「等待」,直到用戶應用程序類被定義爲止;由於定義應用程序類的include必須在用戶實現之前出現,因此在同一個腳本中也會調用「check」,並且在用戶定義它們的函數之前,因此不會查找用戶類,因爲它尚未定義。
我使用的「技巧」是讓應用程序在register_shutdown_function函數中運行,然後找到類並運行它;它工作正常,因爲到目前爲止所有的類已經被定義,但我不確定在關閉過程中系統/腳本/進程處於什麼狀態,以及是否可以在這裏開始運行代碼是安全的:-p。
下面的代碼我有這麼遠的例子:
class Application {
static $_instance = null;
public static function getInstance(){
if ($this->_instance == null){
$this->_instance = new get_called_class();
}
return $this->_instance;
}
}
function findApplicationClass(){
$classes = get_declared_classes();
foreach ($classes as $class){
$c = new ReflectionClass ($class);
if ($c->isSubclassOf("Application")
&& $c->hasMethod("Main")){
call_user_func($class . '::Main');
}
}
}
function runApplication(){
findApplicationClass();
}
register_shutdown_function('runApplication');
然後將應用程序很簡單:
include "../lib/com/crt0/crt0.php";
class MyApplication extends Application {
static public function Main (){
echo "Main function";
}
}
我意識到你可以使用MyApplication :: Main()到主腳本的底部,但這樣我可以做附加功能「圍繞」主功能,而無需明確定義它在每個應用程序中:-p – 2009-10-30 12:07:15
加上它看起來很酷:-p – 2009-10-30 12:15:30