Try a catch, nelogické chování – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Try a catch, nelogické chování – PHP – Fórum – Programujte.comTry a catch, nelogické chování – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
dum8d0g
~ Anonymní uživatel
2 příspěvky
5. 9. 2007   #1
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Reklama
Reklama
dalaman0
Věrný člen
6. 9. 2007   #2
-
0
-

Aj mne to lezie na nervy ze sa warningy vypisu. Skus nastavit error_reporting na nulu
alebo
potom toto



<?
try
{
echo "Zacatek programu";
$a = 1;
$b = 0;
if ($b==0)
{
throw new Exception("Delenie nulou");
}
echo $c=$a/$b;
echo "Konec programu";
}
catch (Exception $e)
{
echo "CHYBA! ".$e->getMessage();
}

?>


A ono to vypise:


Zacatek programu
CHYBA! Delenie nulou

Nahlásit jako SPAM
IP: ...–
Lepšie je mať psa na saláme ako salámu pod psom !!!
Ondra
~ Anonymní uživatel
236 příspěvků
6. 9. 2007   #3
-
0
-

To dum8d0g: Co je na tam nelogickeho, nativni fce php nevyhazuji vyjimky, to je cele...

Nahlásit jako SPAM
IP: ...–
hrach
~ Redaktor
+1
Boss
6. 9. 2007   #4
-
0
-

To Ondra : presne tak,.... bohuzel :(

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
insider0
Věrný člen
7. 9. 2007   #5
-
0
-

To dalaman: tvuj kod mozna bude fungovat tak, jak je potreba ale tim, ze overujes a az pak hazes vyjimku, ta konstrukce temer ztraci smysl, protoze v mnoha pripadech staci pouzit jen ta podminka a vyhazovani chyby je uz navic (chyba v pripade podminky je else) ... try by mel fungovat predevsim jako ochrana proti padu programu pri dejme tomu necekane chybe tim, ze skoci na cast kodu, ktera o teto chybe napr informuje, ale aplikace jede stale dal ...

Nahlásit jako SPAM
IP: ...–
I don't want to see you go,[br] The sky is over[br] Even though we can't afford[br] The sky is over,[br] The sky is over us.[br][br] CIVILIZATION IS OVER
dum8d0g
~ Anonymní uživatel
2 příspěvky
8. 9. 2007   #6
-
0
-

Díky kluci už to chápu. Vyjímky prostě v php nepoužívat, nemá to smysl. Ruční předcházení všem myslitelným komplikacím, které by jinak odchytila všeobecná Exception, je příliš zdlouhavé a v podstatě nemožné takže na to prostě kašlu a žádné vyjímky stavět nebudu.

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 188 hostů

Podobná vlákna

Try catch — založil birkof

C# - Try and Catch — založil TonyT

Try catch finally — založil damegu

Try { smth } catch { — založil noro

Catch nezachytí vyjímku — založil Scrash

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý