У меня работает следующий код (Win XP SP3, PHP 5.2.17 (cli) (сборка: 6 января 2011 17:37:45)):
<?php
try
{
echo "Trying to create object"."\r\n";
$obj = new COM("FailingObject");
echo "Object created";
}
catch(com_exception $e)
{
echo "Caught exception"."\r\n";
$c = $e->getCode();
$m = $e->getMessage();
echo "Error Code: ".dechex($c)."\r\n";
echo $m;
}
?>
Выполнение этого скрипта с использованием PHP в командной строке дает ожидаемый результат:
Попытка создать объект
Пойманное исключение
Код ошибки: 80080008
Не удалось создать COM-объект FailingObject: сервер объектов останавливается, когда
Сервис OLE связывается с ним
Протестированный объект "FailingObject" представляет собой простой COM-объект ATL, который использует
HRESULT FinalConstruct()
{
return CO_E_SERVER_STOPPING;
}
для имитации ошибки при создании объекта.
Мое лучшее предположение (и я могу быть совершенно неправ в этом), что в вашем случае ошибка вызывается не созданием объекта, а другим COM-вызовом где-то в PHP, который затем обрабатывается неправильно.
Вы можете рассмотреть возможность отправки отчета об ошибке для этого поведения, потому что обычно вы должны быть в состоянии отловить ошибку.