Ahoj, jsem zvyklý z javy používat ošetřený kód (v jave nutnost jinak to nepustí dál kompilátor) a tak ošetřuji i v php (5). Používám hlavně try-catch klauzuli, ale ta se vůbec nechová tak jak jsem zvyklý z javy. Konkrétně, toto je to, co očekávám, že se stane:
> cat Try.java
import java.util.*;
public class Try {
public static void main(String args[]){
System.out.println("Zacatek programu");
try {
int a = 1;
int b = 0;
int c = a/b;
System.out.println(" "+c);
} catch (Exception ex) {
System.out.println("Pokus o deleni nulou.");
}
System.out.println("Konec programu");
}
}
> javac Try.java
> java Try
Zacatek programu
Pokus o deleni nulou.
Konec programu
>
Je vidět, že v javě se při vyhození vyjímky přejde okamžitě na blok catch, který má alternující význam a vykoná se jeho kód. To samé v php
> cat try.php
<?php
echo "Zacatek programu";
try {
$a = 1;
$b = 0;
$c = $a/$b;
} catch (Exception $ex) {
echo "Pokus o deleni nulou";
}
echo "Konec programu";
?>
>
Vyvolává takovýto výstup
Zacatek programu
Warning: Division by zero in /home/dum8d0g/laborka/trycatch/try.php on line 6
Konec programu
Což se mi vůbec nelíbí. Dokonce když try-catch klauzuli vyhodím
echo "Zacatek programu";
$a = 1;
$b = 0;
$c = $a/$b;
echo "Konec programu";
?>
Tak je výstup opět
Zacatek programu
Warning: Division by zero in /home/dum8d0g/laborka/trycatch/try.php on line 5
Konec programu
Takže try-catch vlastně nedělá vůbec nic. Tak k čemu teda v php je? Používám ho špatně? Mým cílem je, aby se nevypisoval onen Warning, ale nějaká hláška, kterou sám určím, popřípadě následoval alternující blok kódu, který důvod dané exception opraví.
A moudro na konec : Exception potvrzuje pravidlo.