ho creato una classe all'interno della quale vengono lanciate delle eccezioni sia nel costruttore, che nei metodi e nel distruttore. La sintetizzo qui:

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 ora la sto testando con questo codice:

codice:
try
{
$fp = new FileOperation("pippo.txt", FileOperation::FILE_WRITE_BINARY);
$fp->WriteLine("scrivo una riga");
}	
catch (FileOperationException $e)
{ echo $e->getMessage(); }
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 problema

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?