Идентификация имен классов из $ _SERVER

Каков наилучший способ получить имя класса для запрошенного PHP- файла, если мой неизвестный класс следует следующему шаблону?

index.php

<?php require_once("startup.php"); class NotIndex extends View { public function getView() { echo "<pre>View Data</pre>"; } } ?> 

Для тестирования я хочу создать экземпляр класса NotIndex в скрипте startup.php .

startup.php

 <?php require_once("view.php"); //Include the script again to bring in the class definition include($_SERVER['SCRIPT_FILENAME']); //Make sure I'm seeing any errors error_reporting(E_ALL); ini_set('display_errors','On'); //If I knew the class I could just do this $Page = new NotIndex(); $Page->getView(); //Todo: Find the class from $_SERVER['SCRIPT_FILENAME'] //Todo: Once we find the class create an instance and call getView() exit; ?> 

view.php

 <?php abstract class View { abstract function getView(); } ?> 

Я думаю, что решение регулярного выражения может быть простым, так как желаемые данные всегда будут находиться между «классом» и «расширением». У меня нет большого опыта в формулировании желаемого выражения, и я бы оценил некоторое понимание.

Следующее решение может или не может быть хорошим способом сделать это, но это привело меня к решению нерегулярного выражения, которое всегда является плюсом. Если кто-то может улучшить это, тогда я с радостью отдам им кредит на оба моих вопроса выше. Кредит фактически переходит к @Nik, отвечающему за вопрос о переполнении стека. Извлечение имен функций из файла (с регулярными выражениями или без них) . Если я сделаю это в своем сценарии запуска, то, вероятно, могу рассчитывать на то, что неизвестный класс является последним в массиве. Тем не менее, я планирую интегрировать это в свою структуру и хотел бы получить более полное решение.

Поскольку имя класса неизвестно, вы можете спросить, как мы можем быть уверены? Ну, абстрактный класс View появляется прямо перед неизвестным классом в массиве. Любое решение наверняка должно было бы это проверить. Таким образом, без гарантии последний класс является необходимым классом, мне, вероятно, нужно пройти назад в массиве, пока я не идентифицирую абстрактный класс View а предыдущее значение в массиве будет неизвестным подклассом.

startup.php

 <?php require_once("view.php"); //Include the script again to bring in the class definition include($_SERVER['SCRIPT_FILENAME']); //Make sure I'm seeing any errors error_reporting(E_ALL); ini_set('display_errors','On'); //If I knew the class I could just do this $Page = new NotIndex(); $Page->getView(); //Todo: Find the class from $_SERVER['SCRIPT_FILENAME'] //Todo: Once we find the class create an instance and call getView() $Classes = get_declared_classes(); $ViewObject = array_pop($Classes); $NewPage = new $ViewObject(); $NewPage->getView(); exit; ?> 

Просмотр данных

Пожалуйста, поделитесь мнениями об этом использовании.

Таким образом, это решение работает только в том случае, если я включаю свой абстрактный класс View непосредственно перед включением неизвестного подкласса снова через include($_SERVER['SCRIPT_FILENAME']); , Таким образом, это означает, что get_declared_classes() добавляет классы в том порядке, в котором они были определены или включены. Это может быть проблемой.

 <?php require_once("view.php"); //Include the script again to bring in the class definition include($_SERVER['SCRIPT_FILENAME']); include("killsolution.php"); //Make sure I'm seeing any errors error_reporting(E_ALL); ini_set('display_errors','On'); //If I knew the class I could just do this $Page = new NotIndex(); $Page->getView(); //Todo: Find the class from $_SERVER['SCRIPT_FILENAME'] //Todo: Once we find the class create an instance and call getView() $Classes = get_declared_classes(); $ViewObject = array_pop($Classes); $NewPage = new $ViewObject(); $NewPage->getView(); exit; ?> в <?php require_once("view.php"); //Include the script again to bring in the class definition include($_SERVER['SCRIPT_FILENAME']); include("killsolution.php"); //Make sure I'm seeing any errors error_reporting(E_ALL); ini_set('display_errors','On'); //If I knew the class I could just do this $Page = new NotIndex(); $Page->getView(); //Todo: Find the class from $_SERVER['SCRIPT_FILENAME'] //Todo: Once we find the class create an instance and call getView() $Classes = get_declared_classes(); $ViewObject = array_pop($Classes); $NewPage = new $ViewObject(); $NewPage->getView(); exit; ?> 

Неустранимая ошибка: вызов неопределенного метода killsolution :: getView ()


(Этот вопрос является подмножеством другого открытого вопроса о переполнении стека, каковы некоторые методы инициализации объектно-ориентированной инфраструктуры PHP? )