Originariamente inviato da knottyboy
andr3a mi faresti un esempio pratico dell'eccezzione senza throw?
come ho detto, la mia era una precisazione sul fatto che le eccezioni possono tranquillamente essere usate senza generare errori errori fatali poichè la causa di tali errori è il solo throw e non l' eccezione.
L' eccezione di per se è solo una classe built-in estendibile o usabile come qualunque altra classe e non ha vincoli.
Il throw invece ha vincoli, se non è all' interno di un try catch genera errori fatali e non può quindi essere usato.
Il fatto di avere eccezioni in PHP non è sempre un bene, ci sono motivi validi per non usarle come si è soliti fare.
Uno di questi credo sia il fatto che un codice "intasato" di try catch con più catch e senza finally potrebbe risultare veramente illeggibile invece di migliorare la lettura di un codice.
Ecco un esempio banale di pagina o script che non usa try catch ma che , come con l'uso di try catch, prosegue nei suoi lavori per dare solo alla fine l'eventuale esito positivo o negativo di quanto fatto fino ad ora ( con try catch se non mettiamo dei die o exit negli errori il codice continua tranquillamente ... non è che "lavorano per noi" )
codice:
<?php
class NoTryCatch {
private $__e = array();
final public function setSomething($value) {
if($value != 'test')
$this->setException('value is not correct');
}
final public function hasExceptions() {
return (count($this->__e) > 0);
}
final private function setException($str, $code = 0) {
array_push($this->__e, new Exception($str, $code));
}
final function getExceptions() {
return $this->__e;
}
}
$noTryCatchClass = new NoTryCatch();
$var = 'something';
$noTryCatchClass->setSomething($var);
$another = 'something else';
$noTryCatchClass->setSomething($another);
if($noTryCatchClass->hasExceptions()) {
echo "Sorry, this page has generated some errors.
Please try to use this page correctly.
Exceptions list:
<pre>".print_r($noTryCatchClass->getExceptions(), true)."</pre>";
}
else
echo "It's all OK";
?>
Notare come le info utili delle eccezioni quali la linea, il file ed il resto sono comunque utlizzabili e leggibili, quindi sfruttiamo una classe in modo utile senza usare throw.
Alcuni spunti di riflessione: http://www.andreashalter.ch/phpug/20040115/2.html