Вы используете xdebug? Согласно этому отчету об ошибках PHP и обсуждению , проблема была исправлена, по крайней мере, начиная с PHP 5.1, но эта ошибка xdebug путается с "фатальной ошибкой в преобразованиях исключений" таким образом, что исключение не генерируется, и фатальная ошибка «просачивается».
Я могу воспроизвести это локально, с включенным xdebug:
try {
$soapClient = new SoapClient('http://www.example.com');
}
catch(Exception $e) {
$exceptionMessage = t($e->getMessage());
print_r($exceptionMessage);
}
Это дает мне фатальную ошибку, которую вы описали, даже без ввода предложения catch:
Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.example.com'
Это работает, если я отключаю xdebug прямо перед вызовом:
xdebug_disable();
try {
$soapClient = new SoapClient('http://www.example.com');
}
catch(Exception $e) {
$exceptionMessage = t($e->getMessage());
print_r($exceptionMessage);
}
Это вызывает исключение, как и ожидалось, и я получаю правильный объект SoapFault в предложении catch с сообщением:
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.example.com'
Так что в основном исключения работают как рекламируется. Если они не работают в вашем случае, вы можете столкнуться с ошибкой xdebug или аналогичной проблемой с другим сторонним компонентом.