Czy jest coś podobnego w PHP do try ... else
w Pythonie?php try ... else
Muszę wiedzieć, czy blok try został wykonany poprawnie, jak przy poprawnie wykonanym bloku, zostanie wydrukowany komunikat.
Czy jest coś podobnego w PHP do try ... else
w Pythonie?php try ... else
Muszę wiedzieć, czy blok try został wykonany poprawnie, jak przy poprawnie wykonanym bloku, zostanie wydrukowany komunikat.
Można użyć try { } catch() { }
i throw
. Zobacz http://php.net/manual/en/language.exceptions.php
try {
$a = 13/0; // should throw exception
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
lub ręcznie:
try {
throw new Exception("I don't want to be tried!");
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
zaznajomiony z Pythona, ale to brzmi jak jesteś po bloków catch spróbować używanych z wyjątkami ...
There to jest try-catch
w php.
Przykład:
function inverse($x) {
if (!$x) {
throw new Exception('Division by zero.');
}
else return 1/$x;
}
try {
echo inverse(5) . "\n";
echo inverse(0) . "\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
// Continue execution
echo 'Hello World';
Pytanie dotyczyło odpowiednika php dla "try-else" Pythona, który ma zwarty sposób wykonywania bloku kodu po bloku try, gdy nie jest zgłaszany wyjątek. – vokimon
PHP nie posiada try/catch/indziej. Można jednak ustawić zmienną w bloku catch, które mogą być używane do określenia, czy był prowadzony:
$caught = false;
try {
// something
} catch (Exception $e) {
$caught = true;
}
if (!$caught) {
}
To jest pełne instrukcji '$ caught = true;' jeśli istnieje kilka bloków 'catch'. – Artefacto
Ale tak działa również python "else". – webbiedave
Jedna drobna uwaga, blok innego pythona byłby wykonany, gdyby '$ caught' był fałszywy, nieprawda ... – ircmaxell
try {
$clean = false;
...
$clean = true;
} catch (...) { ... }
if (!$clean) {
//...
}
To najlepsze, co możesz zrobić.
Myślę, że klauzula "else" jest nieco ograniczona, chyba że nie przejmujesz się wyjątkami tam zgłaszanymi (lub chcesz wywrzeć te wyjątki) ... Z mojego rozumienia Pythona wynika, że jest to odpowiednik to:
try {
//...Do Some Stuff Here
try {
// Else block code here
} catch (Exception $e) {
$e->elseBlock = true;
throw $e;
}
} catch (Exception $e) {
if (isset($e->elseBlock) && $e->elseBlock) {
throw $e;
}
// catch block code here
}
Więc to jest nieco bardziej rozwlekły (ponieważ trzeba ponownie rzucać wyjątki), ale także propaguje się stos tak samo jak klauzula innego ...
Edit Lub, nieco czystsza wersja (tylko 5.3)
class ElseException extends Exception();
try {
//...Do Some Stuff Here
try {
// Else block code here
} catch (Exception $e) {
throw new ElseException('Else Clasuse Exception', 0, $e);
}
} catch (ElseException $e) {
throw $e->getPrevious();
} catch (Exception $e) {
// catch block code here
}
Edycja 2
Ponowne czytanie pytanie, myślę, że może być overcomplicating rzeczy z „innego” bloku ... Jeśli jesteś po prostu drukowania (co jest mało prawdopodobne, aby rzucić wyjątek), naprawdę nie trzeba blok innego:
try {
// Do Some stuff
print "Success";
} catch (Exception $e) {
//Handle error here
print "Error";
}
ten kod będzie tylko kiedykolwiek wydrukować alboSuccess
lub Error
... Nigdy oba (ponieważ jeżeli funkcja print
zgłasza wyjątek, to won” t faktycznie drukowane ... Ale nie sądzę, że print
CAN może zgłaszać wyjątki ...).
Chcesz wyjaśnić sprawę? Czy popełniłem błąd? – MvanGeest
Nie padłem, ale pytał o blok "else", a nie o wyjątki w ogóle ... – ircmaxell
Oh, a '$ a = 13/0;' nie wyrzuci wyjątku, chyba że masz zainstalowany moduł obsługi błędów, który zgłasza wyjątki ('set_error_handler (function ($ errno, $ errstr, $ errfile, $ errline) {throw new ErrorException ($ errstr, 0, $ errno, $ errfile, $ errline);}); '... http://www.php.net/manual/en/class.errorexception.php) – ircmaxell