не перехватывает Exception

filipchuk

Новичок
не перехватывает Exception

Есть пример файла test.php

PHP:
<?PHP
try{ 
    throw new Exception(); 
	echo 'never execute';    
}catch(Exception $e){ 
    print_r($e); 
}
на сервере хостинга (php 5.2.3) при его выполнении выдает ошибку
Fatal error: Uncaught exception 'Exception' in /home/clients/test.php:3 Stack trace: #0 {main} thrown in /home/clients/test.php on line 3
на локальном сервер еошибки нету...

Кто подскажет, почему выдает ошибку
 

iSlayter

Новичок
Re: не перехватывает Exception

это что-то из области фантастики :)
 

filipchuk

Новичок
код файла в точности привел в первом посте, этот файл на локальном выдает ожидаемый результат, копирую на сервер - выдает фатальную ошибку.... (написано точно Exception, так как в ЗендСтудии есть автокомплит :))
 

itprog

Cruftsman
о, в интернете говорят может из-за старого eaccelerator-а (с 0.9.5.2 такого быть не должно)
 

advocat

developer
насколько я помню, такая ошибка может возникнуть из-за того, что не определено сообщение о ошибке

могу как вариант предложить попробовать

PHP:
<?php

try {
    throw new Exception('Exception message');
}
catch (Exception $e) {
    var_dump($e);
}
 

fixxxer

К.О.
Партнер клуба
>>>с 0.9.5.2 такого быть не должно
проверил код из стартового постинга на
PHP 5.2.5 with eAccelerator v0.9.5.2,
все работает правильно
 

TLENS

Новичок
Проблема может быть когда в Catch отлавливаешь не тот Exception. Например:
PHP:
<?php
try {
    throw new ErrorExcetion();
} catch(Excetpion $e) {

}
 

WMix

герр M:)ller
Партнер клуба
эх где ты 6 лет назад был? все поздно уже, взорвался реактор!
 

WMix

герр M:)ller
Партнер клуба
а вообще Exception поймает все эксепшины

PHP:
class ErrorExcetion extends Exception{}

try {
    throw new ErrorExcetion();
} catch(Exception $e) {
    echo 'попался голубчик';
}
 

AmdY

Пью пиво
Команда форума
Код:
ErrorException extends Exception {
Конечно будет отлавливать первый подходящий. читай в доке пример #3 http://www.php.net/manual/ru/language.exceptions.php
PHP:
class MyException extends Exception { }

class Test {
    public function testing() {
        try {
            try {
                throw new MyException('foo!');
            } catch (MyException $e) {
                // повторный выброс исключения
                throw $e;
            }
        } catch (Exception $e) {
            var_dump($e->getMessage());
        }
    }
}

$foo = new Test;
$foo->testing();
p.s. Решил обновить знания и слазить в мануал, понял что finally до сих пор ни разу не использовал, хотя знаю о нём.
 

hell0w0rd

Продвинутый новичок
AmdY, я, если честно, вообще не понимаю зачем он может быть нужен) Возможно в языках с ручным управлением памятью - освободить память в finally можно, но в php этот блок бесполезен
 

AmdY

Пью пиво
Команда форума
hell0w0rd, кстати, когда-то был здесь тред об этом, ещё до введения этого слова, кто-то из джава фанов набросил, мы тоже все сомневались, но добавили - хорошо. главное - обратную совместимость не сломали.
 

fixxxer

К.О.
Партнер клуба
AmdY, я, если честно, вообще не понимаю зачем он может быть нужен) Возможно в языках с ручным управлением памятью - освободить память в finally можно, но в php этот блок бесполезен
Да ну.

PHP:
$tmp_file = make_tmp_file();
try {
    // do stuff..
} finally {
    unlink($tmp_file);
}
 

Lionishy

Новичок
Возможно в языках с ручным управлением памятью - освободить память в finally можно, но в php этот блок бесполезен
Всё получается с точностью до наоборот.
Скажем, в С++ можно захватить ресурс инициализацией и освободить в деструкторе (это даже предпочтительно). А в Java/PHP так сделать нельзя.
Сомнительно, что нагружение сборщика мусора отыскиванием автоматических объектов лучше блока finaly.
 
Сверху