Я пытаюсь сделать немного «фантазии»/«экспериментального» php, чтобы вы могли включить скрипт заголовка (crt0: -p), который определяет базовое приложение класс, который вы можете наследовать.Вызов метода после завершения всей обработки скрипта
Затем он предоставляет функцию, которая проверяет ваши классы и находит тот, который подклассифицирует его класс приложения и вызывает функцию «Главная». Таким образом, вы включаете заголовок, создаете класс, который подклассифицирует класс приложения по умолчанию и гарантирует, что вы предоставляете статическую основную функцию и вуаля - ваше приложение магически захватывает внутри основной функции (подобно java/C# и т. Д. С большим количеством предопределенных функциональность приложения).
Единственная проблема, с которой я столкнулся, - «ждать», пока не будет определен класс приложений пользователей; Поскольку включение, определяющее класс приложения, должно быть выполнено до вашей реализации пользователя, «проверка» также вызывается внутри одного и того же сценария и до того, как пользователь определит их функцию, поэтому не находит класс пользователей, поскольку он еще не определен ,
«Уловка», которую я использовал, была предназначена для запуска приложения внутри функции 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 –
Плюс это выглядит круто: -p –