Exceptions no PHP5
Como eu disse anteriormente, um "throw" provoca um efeito em cascata e interrompe os códigos das chamadas anteriores até que a exceção seja tratada.
Vamos a mais um exemplo, uma classe:
Uso:
Outro exemplo, controlando o fluxo:
Vamos a mais um exemplo, uma classe:
<?php class AlreadyExists extends Exception { } class NotExists extends Exception { } class InvalidDirName extends Exception { } class Disk { /** * @var string $path Nome da pasta atual */ protected $path; /** * Construtor * @param string $path Nome da pasta do disco */ public function __construct($path = null) { if ($path !== null) { $this->open($path); } } /** * Abre uma pasta para manipulação * @param string $path Nome da pasta */ public function open($path) { if (is_dir($path)) { $this->path = $path; } else { throw NotExists($path); } } /** * Cria uma nova pasta * @param string $path Nome da nova pasta */ public function make($path) { if (file_exists($path)) { throw new AlreadyExists($path); } if (!ereg('[a-zA-Z]', $path)) { throw new InvalidDirName($path); } mkdir($path); $this->open($path); } } ?>
Uso:
<?php try { $disk = new Disk('lol'); } catch (NotExists $e) { /* * nesse caso o obj $disk nao existe * pois o throw do metodo open, fez um efeito em cascata * e nao deixou o construtor terminar */ print 'diretorio invalido'; } ?>
Outro exemplo, controlando o fluxo:
<?php $path = 'lol'; $disk = new Disk(); try { // tenta abrir $disk->open($path); } catch (NotExists $e) { /** * A pasta ainda nao existe * esse é um exemplo onde a exceção não é um erro */ try { $disk->make($path); } catch (InvalidDirName $e) { // isso é um erro print 'Nome de diretorio invalido: ' . $e->getMessage(); } } ?>
parabéns pelo artigo!!
muito bom e bem explicado...
issu vai ser muito útil para o meu sistema de log de erro
:p
;)
muito bom e bem explicado...
issu vai ser muito útil para o meu sistema de log de erro
:p
;)
17/08/2005 7:19am
(~19 anos atrás)
Por exemplo, o exemplo da página 5 retornou:
Fatal error: Call to undefined function NotExists() in exception.php on line 33
Ah sim, na linha 33: throw NotExists($path);
[]s