1.- La clase ViewException esta definida ahi para ahorrar codigo, pero puede estar definida en otro fichero sin ningun problema aunque no tenga miembros ni nada (de hecho es mas recomendable que este en su fichero propio).
2.- La clase View ve a ViewException porque esta definida aunque estuviera asi:
Código PHP:
<?php
include( 'View/Exception.php' );
class View {
}
Como te comento no importa donde este la clase con que tu la incluyas la puedes lanzar.
Para usar el comando
throw tu debes de tener una clase que herede de Exception, no puedes lanzar clases que no hereden a Exception (esto es por diseño).
El comando throw lanza una clase por decir lanzar una excepcion nueva:
Código PHP:
throw new Exception( "algo paso mal" );
y la cachas en un bloque catch, pero que pasa como te decia en un ejemplo mas grande donde solo deseas cachar errores de SQL:
Código PHP:
function algo() {
try {
// muchas cosas
} catch( SQLException $se ) {
// logueamos o rollback o algo
} catch( Exception $e ) { // bloque generico para todas las excepciones
Logger::log( $e->getMessage() );
throw $e; // Aqui relanzamos la excepcion para que un bloque mayor la controle
}
}
try {
algo();
} catch( Exception $e ) { // Este bloque no se va a ejecutar para excepciones de SQL, ya que esas las "cachamos" dentro de nuestra funcion y nunca van a llegar aca...
echo $e->getMessage();
}
Como puedes ver, lanze una excepcion ya creada dentro del bloque catch para atraparla mas arriba en mi codigo, para eso sirve el comando throw.
Saludos.