ho creato una classe all'interno della quale vengono lanciate delle eccezioni sia nel costruttore, che nei metodi e nel distruttore. La sintetizzo qui:
e ora la sto testando con questo codice:codice:class FileOperation { public function __construct($file, $mode) { switch($mode) { case self::FILE_READ_BINARY: if(!(is_readable($file))) throw new FileOperationException("Il file non esiste o non hai i permessi di lettura su di esso", self::FILE_CANNOT_READ); $this->readable = TRUE; break; case self::FILE_WRITE_BINARY: case self::FILE_APPEND_BINARY: if(is_file($file) && (!(is_writable($file)))) throw new FileOperationException("Non hai i permessi di scrittura sul file", self::FILE_NOT_WRITABLE); $this->writable = TRUE; break; default: throw new FileOperationException("Operazione sul file non consentita", self::FILE_WRONG_MODE); break; } if(!($this->risorsa = @fopen($file, $mode))) throw new FileOperationException("Errore nell'apertura del file", self::FILE_CANNOT_OPEN); $this->modo_apertura = $mode; } public function WriteLine($stringa) { if(!($this->writable)) throw new FileOperationException("Il file e' stato aperto in modalita' di lettura", self::FILE_NOT_WRITABLE); if(!($byte_scritti = fwrite($this->risorsa, $stringa))) throw new FileOperationException("Errore sconosciuto di scrittura", self::FILE_CANNOT_WRITE); return $byte_scritti; } function __destruct() { if(!(@fclose($this->risorsa))) throw new FileOperationException("Errore nella chiusura del file", self::FILE_CANNOT_CLOSE); } }
e mi sa di aver fatto un gran casino perche' se una eccezione viene chiamata dal costructor, l'oggetto nn viene proprio creato e quindi non è un problemacodice:try { $fp = new FileOperation("pippo.txt", FileOperation::FILE_WRITE_BINARY); $fp->WriteLine("scrivo una riga"); } catch (FileOperationException $e) { echo $e->getMessage(); }
Quando l'eccezione viene chiamata dal metodo WriteLine il distruttore NON viene chiamato
Quando viene chiamata l'eccezione del distructor, addirittura, ho un fatal error di eccezione nn catturata
dove ho sbagliato?



Rispondi quotando


