Portál AbcLinuxu, 10. května 2025 02:06
if [[ $? == 0 ]]; then ...
, poradí někdo jak se to dělá v php? Děkuji
set_error_handler()
.
v souboru index.php function error_handler(){...} set_error_handler("error_handler"); include "error.php"; v souboru error.php include "nesmysl"; # chytne neexistujici-funkce; # nechytne neco # nechytne
throw new \Exception("Nejaky text");
Co to? Však přesně to se stane.
Pokud nějaký návratový kód nějaké fce znamená chybu aplikace tak si ten exit();
zavolej.
Zápisy jsou stejné
if [[ $? == 0 ]]; then exit 1 fi
if($value != 0){ exit(1); }Jestli chceš PHP používat jako bash, tak používej passthru(), <irony>což je ovšem rada na zlato.</irony>.
Jediný rozdíl je v tom, že v bash-i, také díky tomu, že provoláváš vlastně jednotlivé aplikace, se do $? uloží návratový kód dané aplikace (jen a pouze integer). V PHP, jak ve většině jazyků, máš funkce, které mohou vracet cokoliv.
Černobílí svět je taky hezký, ale relita je taková že je mnoho stavů, které mohou znamenat chybu a které ne a liší se kód od kódu (stejně jako v bash-i, návratový kód jiný než nula, neznamená vždy chybu, ale klidně jen požadovanou informaci.).
Pokud je to web aplikace, tak většinou to nechceš okamžitě ukončit a, nejen proto, se používají výjimky na kontrolu chyb aplikace.
$file = "/foo/bar.php"; if(file_exists($file)) { if(!require_once($file)) { msgError('500'); exit(); } } else { msgError('404'); }Jedno include a pul stránky kódu, to je hnus..
Běžné je:
require_once('/foo/bar.php');
Pokud to opravdu chceš takto (nebudu to rozebírat):
$file = "/foo/bar.php"; if(file_exists($file)) if(!require_once($file)) throw new MyRegException(500); else throw new MyRegException(400);Ale samozřejmě to navádí to dát minimálně do fce.
function grosseReguire($file){ if(file_exists($file)) if(!require_once($file)) throw new MyRegException(500); else throw new MyRegException(400); }a pak normálně volat:
grosseReguire($file);No a na odchytávání výjimek máme
try{ grosseReguire($file); /* * code */ } catch(MyRegException $e){ errorReg($e); } catch(Exception $e){ error($e); }
Chyba která oznamuje chybu grrr ?…?
reguire()
ukončí běh a vypíše chybu.
Pokud nic nevidíš, tak máš vypnuto vypisování chyb, ze skriptu je lze zapnout:
error_reporting(E_ALL);
případně error_reporting(E_ALL | E_STRICT);
a
ini_set("display_errors", 1);
.
Pokud se bavíš o odchytávání výjimek a jejich zpracování, tak jak si to uděláš, tak to máš…
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.