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
(~20 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