За последние 24 часа нас посетили 18482 программиста и 1617 роботов. Сейчас ищут 1430 программистов ...

Exception. Можно ли сделать как в Java ?

Тема в разделе "Прочие вопросы по PHP", создана пользователем NR55RU, 17 авг 2012.

  1. NR55RU

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

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    Я порыл инет но ответа не нашел, может это касается более новых версий PHP но вопрос вот в чем.
    Я Java в методе можно указать что метод выбрасывает исключения и компилятор потребует обработать или "пробросить" это исключение кодом что будет вызывать данный метод.
    Есть ли в PHP такая возможность или же пока в PHP такой механизм не существует ?

    Просто иногда забываешь обработать возможные исключения и они выскакивают уже потом в тех случаях которые сразу не протестировал, и ловятся уже общим Exception, а если такой механизм как в Java есть тогда транслятор на стадии трансляции выкинет ошибку о том что я не обработал возможные исключения.
     
  2. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    А откуда ему знать - вы вообще хотите ловить это исключение или вас вполне устраивает его ловить финальным общим исключением? Не, анализатора кода нет, ибо это все же скриптовый язык, который сразу код и исполняет. Возомжно тут может помочь IDE, хотя не готов сказать какая умет это.
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Обработка ошибок возможна, прочитайте:
    php.net/manual/ru/errorfunc.examples.php

    И php это вам не Java, не сравнимо разные языки =)
     
  4. NR55RU

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

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    В объявлении метода в Java можно указать что метод может выбросить исключение(-ния) и тогда компилятор просто не даст скомпилировать код если код что вызывает метод не обработает возможное исключение или не пробросит его выше. То есть компилятор видит что при объявлении метода отдельной конструкцией было указано что метод может кинуть исключения и он следит за тем что бы в том месте где этот метод вызывается было поставлено TRY или же исключение было проброшено выше (тот случай если обрабатывать мы его не хотим).
    Так же мог бы видеть это все и транслятор PHP и суть вопроса и была именно в этом не существует ли случаем в PHP такой конструкции в объявлении метода говорящей транслятору о том что метод может выкинуть исключение и транслятор выкинет предупреждение если код вызывающий этот метод не обработает или не пробросит исключение дальше. Просто как знать вдруг у меня не полная инфа по Исключениям и механизму их работы вот и задал вопрос.
    Так как на практике складывается ситуация такая, что если ты забываешь отловить кое нить SomeErrorException оно автоматом улетает в самую верхушку кода где его ловит общий Exception, а это SomeErrorException может вылететь спустя пол года после запуска программы в какой-то очень редкой ситуации и спустя полгода только узнаешь что ты его оказывается забыл обработать, в то время как если была бы аналогичный Java механизм.. транслятор бы на стадии первого запуска сказал.. эй парень.. я тут хотел метод вызвать а он оказывается может исключение кинуть а ты его не обработал и не пробросил выше так что Warning короче и давай или обработай или прокинь выше и все..
    Вот в чем вопрос и был.. :)

    P.s. А то что Java и PHP языки мягко говоря разные я знаю :)
     
  5. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Нет, в PHP вроде нет такого. Тут дело даже не в том, что PHP и Java разные, а разница в компиляции vs интерпретация. В компиляции используется весь ваш проект, в интерпретации - только та часть, которую нужно исполнить. Т.е. ваше место с исключением может быть выполнено через те же самые пол-года, и никакой анализ не поможет, ибо PHP все это время просто не знал про этот код... в отличии от компилятора.
    Ну и я на Java не пишу и считаю это даже скорее вредным, чем полезным, ибо часто фреймворки работают именно похожим способом - ловят "сверху" все не выловленное и сообщают разработчику об ошибке, а иначе бы пришлось плодить кучу лишних catch-ей только для пробрасывания.
    Возможно такая фича в IDE была бы полезна, т.е. именно в процессе разработки показать, что есть исключения. В phpdoc есть параметр - какие исключения выбрасывает метод и, например, phpstorm их генерит, но вот о том, что есть неперехваченные - не сообщает. Нашел feature request http://youtrack.jetbrains.com/issue/WI-2514 - не сильно пользуется популярностью =)