Php 在所有脚本处理完成后调用方法
我正在尝试做一些“花式”/“实验性”php,这样您就可以包含一个头脚本(称为crt0:-p),它定义了一个可以继承的基本应用程序类 然后,它提供一个函数来检查您的类,并找到一个正在子类化其应用程序类的类,并调用“Main”函数。通过这种方式,您可以包含头,创建一个类,该类对默认应用程序类进行子类化,并确保您提供了一个静态的主函数,瞧,您的应用程序在主函数内部神奇地拾取(类似于java/c#等,具有许多预定义的应用程序功能) 我遇到的唯一问题是“等待”用户应用程序类被定义;因为定义应用程序类的include必须在用户实现之前出现,所以“check”也会在同一个脚本中调用,并且在用户定义其函数之前调用,因此找不到尚未定义的用户类 我使用的“技巧”是让应用程序在register\u shutdown\u函数中运行,然后找到类并运行它;它工作正常,因为此时所有类都已定义,但我不确定系统/脚本/进程在此关闭过程中处于何种状态,以及在此处开始运行代码是否安全:-p 以下是我迄今为止的代码示例:Php 在所有脚本处理完成后调用方法,php,Php,我正在尝试做一些“花式”/“实验性”php,这样您就可以包含一个头脚本(称为crt0:-p),它定义了一个可以继承的基本应用程序类 然后,它提供一个函数来检查您的类,并找到一个正在子类化其应用程序类的类,并调用“Main”函数。通过这种方式,您可以包含头,创建一个类,该类对默认应用程序类进行子类化,并确保您提供了一个静态的主函数,瞧,您的应用程序在主函数内部神奇地拾取(类似于java/c#等,具有许多预定义的应用程序功能) 我遇到的唯一问题是“等待”用户应用程序类被定义;因为定义应用程序类的in
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";
}
}
您应该使用类autoloading feauture而不是include()来加载它们,以避免肮脏的把戏;) 应该使用类autoloading feauture而不是include()来加载它们,以避免肮脏的把戏;) 我意识到您可以在主脚本的底部使用MyApplication::Main(),但这样我就可以“围绕”主函数执行额外功能,而不必在每个应用程序中明确定义它:-pI意识到您可以在主脚本的底部使用MyApplication::Main(),但这样我就可以“围绕”执行额外功能主函数不必在每个应用程序中明确定义:-p