Привет. Столкнулся с проблемой - у меня инклюдятся все файлы в некоторой папке. В этих файлах содержатся классы, одноименные имени файла и имеющие родителя некоторый абстрактный класс. Но в некоторых случаях их родитель не абстрактный класс, а совсем другой класс, который происходит от всё того-же абстрактного родителя. Ладно, это слишком запутанное вступление. Проблема в том, что когда я инклюдю все файлы, может случится, что в файле будет что-то вроде этого: Код (Text): class myclass extends MyParent { ... } Если класса MyParent не существует, возникнет ошибка и выполнение скрипта остановится. Мне нужно отлавливать файлы с такими вот несуществующими классами. Как можно реализовать? Спасибо
В силу убогости моего мышления мне не под силу понять, как при помощи __autoload можно избежать остановки выполнения скрипта при вышеописанной ситуации (класса MyParent не существует вообще). Может быть вы мне всё-таки подскажите?
На самом деле это проблема наверно чисто надуманная, но мне интересно, можно ли на php это реализовать. Смысл в том, что я в целях общего образования и получения опыта хочу написать небольшую CMS. Архитектура примерно такая: есть ядро, которое подключает к себе расширения. Расширения это классы, которые наследуются или от базового класса расширений или от другого родителя, который наследуется от базового класса расширений. Значит, все родители лежат в папке parents. И если мы папку parents переименуем на _parents и у нас будут расширения, наследуемые от кого-то из родителей в папке parents, то получим ошибку Как видим, проблема действительно надуманная, но мне было бы приятно если бы моя CMS-ка не вываливалось на таких пустяках
Слишком много если. "Если" "ктото" "перименует папочку" в которой лежат ключевые классы, это не просто надуманная проблема, это полный капец.
Это точно надуманная проблема. Система не должна запускаться, если не хватает базовых компонентов. А на PHP можно реализовать, например, так: PHP: <?php function __autoload($className) { eval('class ' . $className . ' {}'); } Тока вот не словишь ли ты fatal error на первом же require_once 'parents/someclass.php'? Короче, выкинь из головы эту идею.
Sergey89, спасибо Действительно, как я сам не подумал про eval Не словлю. Я смотрю, есть ли папка parents, если есть, смотрю какие в ней файлы с расширением php и инклюдю их. Потом в ядре, когда добавляю расширения, проверяю, является ли оно потомком базового класса. То есть описанный тобой способ будет работать, причем расширение, которое наследуется от несуществующего родителя не будет добавлено в движок. Моя идея состоит в том, чтобы для запуска системы хватало одного только расширения по умолчанию(его имя дефайним в конфиге). То есть делаем мы сайт, допустим. Все лишние расширения из папки просто сносим, нужные добавляем. Как по мне, так довольно удобно можно повторно использовать уже однажды написанный код. Плюс написание CMS сводится к написанию расширений, что позволяет удобно работать в команде. Ну это мое личное мнение. Кстати, естественно, вся вёрстка в шаблонах.