За последние 24 часа нас посетили 38034 программиста и 1811 роботов. Сейчас ищут 826 программистов ...

Отловить ошибку, но не "повиснуть" (:

Тема в разделе "Прочее", создана пользователем Division, 5 апр 2008.

  1. Division

    Division Активный пользователь

    С нами с:
    8 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Украина, Херсон
    Привет. Столкнулся с проблемой - у меня инклюдятся все файлы в некоторой папке. В этих файлах содержатся классы, одноименные имени файла и имеющие родителя некоторый абстрактный класс. Но в некоторых случаях их родитель не абстрактный класс, а совсем другой класс, который происходит от всё того-же абстрактного родителя. Ладно, это слишком запутанное вступление. Проблема в том, что когда я инклюдю все файлы, может случится, что в файле будет что-то вроде этого:

    Код (Text):
    1.  
    2. class myclass extends MyParent {
    3. ...
    4. }
    Если класса MyParent не существует, возникнет ошибка и выполнение скрипта остановится. Мне нужно отлавливать файлы с такими вот несуществующими классами. Как можно реализовать? Спасибо
     
  2. Anonymous

    Anonymous Guest

    __autoload

    Смените аватар. Разрешены только личные фото.

    Горе-модераторы, перенесите в "новичков".
     
  3. Division

    Division Активный пользователь

    С нами с:
    8 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Украина, Херсон
    В силу убогости моего мышления мне не под силу понять, как при помощи __autoload можно избежать остановки выполнения скрипта при вышеописанной ситуации (класса MyParent не существует вообще). Может быть вы мне всё-таки подскажите?
     
  4. Anonymous

    Anonymous Guest

    А как вы наследуете от класса, которого не существует?
     
  5. Division

    Division Активный пользователь

    С нами с:
    8 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Украина, Херсон
    На самом деле это проблема наверно чисто надуманная, но мне интересно, можно ли на php это реализовать. Смысл в том, что я в целях общего образования и получения опыта хочу написать небольшую CMS. Архитектура примерно такая: есть ядро, которое подключает к себе расширения. Расширения это классы, которые наследуются или от базового класса расширений или от другого родителя, который наследуется от базового класса расширений. Значит, все родители лежат в папке parents. И если мы папку parents переименуем на _parents и у нас будут расширения, наследуемые от кого-то из родителей в папке parents, то получим ошибку :) Как видим, проблема действительно надуманная, но мне было бы приятно если бы моя CMS-ка не вываливалось на таких пустяках :)
     
  6. Anonymous

    Anonymous Guest

    Слишком много если. "Если" "ктото" "перименует папочку" в которой лежат ключевые классы, это не просто надуманная проблема, это полный капец.
     
  7. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Это точно надуманная проблема. Система не должна запускаться, если не хватает базовых компонентов.

    А на PHP можно реализовать, например, так:
    PHP:
    1. <?php
    2. function __autoload($className) {
    3.     eval('class ' . $className . ' {}');
    4. }
    Тока вот не словишь ли ты fatal error на первом же require_once 'parents/someclass.php'? Короче, выкинь из головы эту идею.
     
  8. Anonymous

    Anonymous Guest

    Горе-модераторы, в "помойку" все надуманные проблемы.
     
  9. Division

    Division Активный пользователь

    С нами с:
    8 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Украина, Херсон
    Sergey89, спасибо :) Действительно, как я сам не подумал про eval :)
    Не словлю.
    Я смотрю, есть ли папка parents, если есть, смотрю какие в ней файлы с расширением php и инклюдю их. Потом в ядре, когда добавляю расширения, проверяю, является ли оно потомком базового класса. То есть описанный тобой способ будет работать, причем расширение, которое наследуется от несуществующего родителя не будет добавлено в движок.

    Моя идея состоит в том, чтобы для запуска системы хватало одного только расширения по умолчанию(его имя дефайним в конфиге). То есть делаем мы сайт, допустим. Все лишние расширения из папки просто сносим, нужные добавляем. Как по мне, так довольно удобно можно повторно использовать уже однажды написанный код. Плюс написание CMS сводится к написанию расширений, что позволяет удобно работать в команде. Ну это мое личное мнение.
    Кстати, естественно, вся вёрстка в шаблонах.