исключения в php … почему никто их не использует?

Я очень новичок в php, и пока я искал примеры использования сокетов, я заметил, что ни один из них не включал код обработки исключений.

Сначала я подумал, что, возможно, php не имеет исключений … но google сказал мне иначе. Есть тонны статей, восхваляющих использование исключений в php (я прихожу из Java & C #, я конвертирован), но тогда, в реальных примерах, никто не заботится о попытках / уловах.

Это связано с тем, что php не имел исключений в предыдущих версиях?

Пример (псевдокод):

$fp = fsockopen($allTheNeededParams); if(!$fp){ //error handling } fwrite($fp, $out);//<-what if something goes wrong here? the socket is never closed? fclose($fp); 

В других языках, когда вы имеете дело с сокетами, которые вы видите, попробуйте / поймайте повсюду. Почему не в php?

Два примера из StackOverflow:

  • Вопрос сокета в Java (с обработкой исключений)
  • Вопрос сокета в PHP (без обработки исключений)

Спасибо за ваше время!

PHP имеет подход, основанный на апокалипсисе, для обработки ошибок: если что-то пойдет не так, скрипт заканчивается и все ресурсы, которые он использует (подключения к базе данных, файлы, сокеты, память), освобождаются во время выполнения. Это делает его менее критичным для решения таких проблем, чем в Java или C #, где серверный код работает непрерывно – в PHP необработанное условие ошибки означает, что один пользователь неудобен, в Java или C # это может означать утечку ресурсов, которая заканчивается принося сервер для всех.

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

  1. В первую очередь PHP не строился с исключениями.
  2. Вы не используете исключения для исключения. Должен быть поддерживающий и объектно-ориентированный код. Система должна строиться с учетом исключений в целом. И вы должны знать, что они делают, а что нет.