Intereting Posts
Не ожидая ответа от Guzzle Запись идентификатора в базу данных и чтение пользователя WordPress с его идентификатором MySQL. Эта версия MySQL еще не поддерживает «LIMIT & IN / ALL / ANY / SOME подзапрос Как создать или изменить класс PHP во время выполнения? Загрузка файла с помощью AngularJS с скриптом php-сервера Imagick: удалить кадры из анимированного GIF? Как обновить базу данных после обновления страницы в javaScript? Magento getUrl не работает с объектом каталога / категории? Слушатель доктрины Symfony onFlush PHPMyAdmin / MySql – добавление поля идентификатора и идентификаторов автопопуляции Как я могу использовать break или продолжить цикл for в шаблоне Twig? Как получить все результаты от отношения hasMany () в Laravel? CSV без кавычек, не работающих с fgetcsv Как справиться с этим HTML-кодом, эхом, с PHP, который как одинарные, так и двойные кавычки? Как проверить типы файлов загруженных файлов на PHP?

Инструмент анализа статического кода PHP, который обнаруживает неискушенные исключения?

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

Я был бы достаточно счастлив увидеть только такие вещи, как throw new SomeException() , где SomeException расширяет Exception .

Я не ищу что-то слишком сложное – просто чтобы предупредить меня, что если я запустил someFunctionThatCanThrow (потому что внутри есть инструкция throw ) из index.php (вы получаете точку), я могу попасть в беду. Даже если во время выполнения это никогда не произойдет.

Благодарю.

    Ответ на вопрос PHPLint . Например, он анализирует

     <?php function some() { if (time() == 123) { throw new Exception("I can't happen"); } } some(); 

    , который никогда не будет генерировать исключение (если вы не в прошлом), в:

     BEGIN parsing of test-cSdHoW 1: <?php 2: 3: function some() 4: { 5: if (time() == 123) { 6: throw new Exception("I can't happen"); throw new Exception("I can't happen"); \_ HERE ==== 6: notice: here generating exception(s) Exception throw new Exception("I can't happen"); \_ HERE ==== 6: ERROR: exception(s) must be caught or declared to be thrown: Exception 7: } 8: } 9: 10: some(); ==== 3: notice: guessed signature of the function `some()' as void() some(); \_ HERE ==== 10: notice: here generating exception(s) Exception some(); \_ HERE ==== 10: Warning: uncaught exception(s): Exception END parsing of test-cSdHoW ==== ?: notice: unused package `dummy.php' ==== ?: notice: required module `standard' Overall test results: 1 errors, 1 warnings. 

    Именно это я и просил 🙂 Добавление docblock и перехват исключения приводит к тому, что больше не появляется никаких ошибок или предупреждений из PHPLint.

    Что касается 2015 года, для PhpStorm существует инструмент SCA, доступный как плагин Php Inspections (EA Extended) – он выполняет этот вид анализа, включая вложенные вызовы. Кроме того, он учитывает контекст, например, в пределах __toString без исключения исключения, приводящие к смертельным, и плагин сообщает об этом.