MANUAL DE PHP

(y algo mas)windsurf pozo izquierdo
Google
search for in the  
ELMARRAJO.COM mysql bulma desarrollo web linux fedora html ayuda

windsurf mercedes camper

Capítulo 20. Excepciones

Tabla de contenidos
Extendiendo excepciones

PHP 5 tiene un modelo de excepciones similar al de otros lenguajes de programación. Una excepción puede ser lanzada, intentada o capturada en PHP. Un bloque de intento (try) debe incluir por lo menos un bloque de captura (catch). Los bloques de captura múltiples pueden ser usados para capturar diferentes tipos de clases; la ejecución continuará después del último bloque de captura definido. Las excepciones pueden ser lanzadas dentro de bloques de captura.

Cuando es lanzada una excepción, la siguiente línea de código no será ejecutada y PHP intentará encontrar el primer bloque de captura de excepciones. Si una excepción no es capturada se despliega un error fatal de PHP con un mensaje de que la excepción no fue capturada, a menos que exista un manejador de errores definido como set_exception_handler().

Ejemplo 20-1. Lanzando una Excepción

<?php
try {
  
$error = 'Always throw this error';
   throw new
Exception($error);

  
// Code following an exception is not executed.
  
echo 'Never executed';

} catch (
Exception $e) {
   echo
'Caught exception: '$e->getMessage(), "\n";
}

// Continue execution
echo 'Hello World';
?>

Extendiendo excepciones

Una clase de definición de excepciones del usuario puede ser definida extendiendo la clase de excepciones incorporado. Los miembros y propiedades mencionados en seguida, muestran lo que está accesible dentro de la clase "hijo" que se deriba de la clase de excepciones incorporados.

Ejemplo 20-2. La clase de excepciones incorporada

<?php
class Exception
{
   protected
$message = 'Unknown exception'// exception message
  
protected $code = 0;                        // user defined exception code
  
protected $file;                            // source filename of exception
  
protected $line;                            // source line of exception

  
function __construct($message = null, $code = 0);

   final function
getMessage();                // message of exception
  
final function getCode();                  // code of exception
  
final function getFile();                  // source filename
  
final function getLine();                  // source line
  
final function getTrace();                  // an array of the backtrace()
  
final function getTraceAsString();          // formated string of trace

   /* Overrideable */
  
function __toString();                      // formated string for display
}
?>

Si una clase se extiende de la clase Exception incorporada y redefine el constructor, es altamente recomendado que también llame parent::__construct() para asegurarse que todos los datos disponibles han sido asignados apropiadamente. El método __toString() puede ser evitado para proveer una salida personalizada cuando el objeto es presentado como una cadena.

Ejemplo 20-3. Extendiendo la clase Exception

<?php
/**
 * Define a custom exception class
 */
class MyException extends Exception
{
  
// Redefine the exception so message isn't optional
  
public function __construct($message, $code = 0) {
      
// some code
  
       // make sure everything is assigned properly
      
parent::__construct($message, $code);
   }

  
// custom string representation of object */
  
public function __toString() {
       return
__CLASS__ . ": [{$this->code}]: {$this->message}\n";
   }

   public function
customFunction() {
       echo
"A Custom function for this type of exception\n";
   }
}


/**
 * Create a class to test the exception
 */
class TestException
{
   public
$var;

   const
THROW_NONE    = 0;
   const
THROW_CUSTOM  = 1;
   const
THROW_DEFAULT = 2;

   function
__construct($avalue = self::THROW_NONE) {

       switch (
$avalue) {
           case
self::THROW_CUSTOM:
              
// throw custom exception
              
throw new MyException('1 is an invalid parameter', 5);
               break;

           case
self::THROW_DEFAULT:
              
// throw default one.
              
throw new Exception('2 isnt allowed as a parameter', 6);
               break;

           default:
              
// No exception, object will be created.
              
$this->var = $avalue;
               break;
       }
   }
}


// Example 1
try {
  
$o = new TestException(TestException::THROW_CUSTOM);
} catch (
MyException $e) {      // Will be caught
  
echo "Caught my exception\n", $e;
  
$e->customFunction();
} catch (
Exception $e) {        // Skipped
  
echo "Caught Default Exception\n", $e;
}

// Continue execution
var_dump($o);
echo
"\n\n";


// Example 2
try {
  
$o = new TestException(TestException::THROW_DEFAULT);
} catch (
MyException $e) {      // Doesn't match this type
  
echo "Caught my exception\n", $e;
  
$e->customFunction();
} catch (
Exception $e) {        // Will be caught
  
echo "Caught Default Exception\n", $e;
}

// Continue execution
var_dump($o);
echo
"\n\n";


// Example 3
try {
  
$o = new TestException(TestException::THROW_CUSTOM);
} catch (
Exception $e) {        // Will be caught
  
echo "Default Exception caught\n", $e;
}

// Continue execution
var_dump($o);
echo
"\n\n";


// Example 4
try {
  
$o = new TestException();
} catch (
Exception $e) {        // Skipped, no exception
  
echo "Default Exception caught\n", $e;
}

// Continue execution
var_dump($o);
echo
"\n\n";
?>


add a note add a note User Contributed Notes
Excepciones
jazfresh at hotmail.com
07-Aug-2006 10:18
Sometimes you want a single catch() to catch multiple types of Exception. In a language like Python, you can specify multiple types in a catch(), but in PHP you can only specify one. This can be annoying when you want handle many different Exceptions with the same catch() block.

However, you can replicate the functionality somewhat, because catch(<classname> $var) will match the given <classname> *or any of it's sub-classes*.

For example:

<?php
class DisplayException extends Exception {};
class
FileException extends Exception {};
class
AccessControl extends FileException {}; // Sub-class of FileException
class IOError extends FileException {}; // Sub-class of FileException

try {
  if(!
is_readable($somefile))
     throw new
IOError("File is not readable!");
  if(!
user_has_access_to_file($someuser, $somefile))
     throw new
AccessControl("Permission denied!");
  if(!
display_file($somefile))
     throw new
DisplayException("Couldn't display file!");

} catch (
FileException $e) {
 
// This block will catch FileException, AccessControl or IOError exceptions, but not Exceptions or DisplayExceptions.
 
echo "File error: ".$e->getMessage();
  exit(
1);
}
?>

Corollary: If you want to catch *any* exception, no matter what the type, just use "catch(Exception $var)", because all exceptions are sub-classes of the built-in Exception.
linus at flowingcreativity dot net
19-Jul-2006 02:06
Here is a basic example of a way to mimick the convenience of exception handling in PHP4:

<?php

do {
   if (!
$test_condition) {
      
$error = 'test condition failed';
       break;
   }
  
   if (!
test_function()) {
      
$error = 'test function failed';
       break;
   }
  
   echo
'success!';
  
} while (
false);

if (isset(
$error)) {
   echo
$error;
}

?>

Obviously this falls far short of PHP5 real exception handling in terms of normalisation.  Also, $error won't propogate up the call stack like a real exception (i.e. test_function() can't itself throw an exception, nor call 'break').  But for me, the most important thing about exception handling is to be able to run through code and deal with errors separately, and not have to have a million nested IFs.  Compare that code to this:

<?php

if (!$test_condition) {
  
$error = 'test condition failed';
} elseif (!
test_function()) {
  
$error = 'test function failed';
} else {
   echo
'success!';
}

if (isset(
$error)) {
   echo
$error;
}

?>

At first this seems no more cumbersome, but what if test_function took arguments that required complicated preparation?  You would need a mess like this:

<?php

if (!$test_condition) {
  
$error = 'test condition failed';
} else {
  
$fooRes = mysql_query('SELECT foo FROM bar LIMIT 1');
  
$fooRow = mysql_fetch_assoc($fooRes);
  
   if (!
test_function($fooRow)) {
      
$error = 'test function failed';
   } else {
       echo
'success!';
   }
}

?>

Obviously this could get out of hand quickly.  In the first example, you can just prepare the argument before the 'if (!test_function($fooRow))', and on the same nesting level.

This method is also somewhat more flexible in that you can generate 'exceptions', and then deal with them much later (which may be desirable if they aren't really threatening).  In PHP5, a catch block must always follow a try block directly.
tatarynowicz at gmail dot com
09-Jul-2006 06:26
Carlos Konstanski: You can't directly extract previous lexical environment in non-functional languages.

What you probably _can_ do is to create a function that dumps the current lexical environment (to an external file or to stdout) and then use it to recreate past states.

function log_lex ($vars, $functions) {
  $f = fopen('lex_env.log', 'a');
  fwrite($f, serialize(array($vars, $functions, get_defined_constants(), debug_backtrace()));
  fclose($f);
}

log_lex (get_defined_vars(), get_defined_functions());

Writing the parser/browser for dumps is the difficult part. Then just sprinkle the code with log_lex() and see how the program runs.

Sure, it works better in Lisp, but Lisp isn't supported on the webservers I work with, and making PHP more like Lisp would probably make it as popular as Lisp is.
13-May-2006 04:49
@armenio at inmidiaweb dot com dot br:
When echoing into JavaScript code must use htmlspecialchars(addslashes($this->msg)) - think what would happen if msg was "')</script>";
armenio at inmidiaweb dot com dot br
10-May-2006 01:23
<?php
class alert{
  
   public
$return;
   public
$msg;
  
   public function
__construct($value){
      
$this->msg = $value;
   }
   public function
OutPut(){
      
$this->return  = '<script language="JavaScript">';
      
$this->return .= '    alert("'.$this->msg.'")';
      
$this->return .= '</script>';
       return
$this->return;
   }
}
$msg = new alert('classe criada com sucesso');
$msg->OutPut();
?>
fjoggen at gmail dot com
26-Apr-2006 01:58
This code will turn php errors into exceptions:

<?php
function exceptions_error_handler($severity, $message, $filename, $lineno) {
   throw new
ErrorException($message, 0, $severity, $filename, $lineno);
}

set_error_handler('exceptions_error_handler');
?>

However since <?php set_error_handler()?> doesn't work with fatal errors, you will not be able to throw them as Exceptions.
gerry03 at 4warding dot com
13-Nov-2005 09:39
Good PHP5 article about exceptions. I have read quite a few now and this is the only one I've liked:

http://www.andreashalter.ch/phpug/20040115/
Carlos Konstanski
29-Sep-2005 10:17
Being able to catch the exception up the call stack from where it is thrown is a good idea, in that it lets you handle the exception closer to where it ought to be handled - in the calling code.  Not as good as common lisp though, where you can call a condition handler that resides up the stack without actually unwinding the stack.  With this additional feature, you have the lexical environment at the point where the exception occured, combined with the relocation of the handler to a place where the lower-level function's failure can be addressed from the standpoint of the calling code.

Even so, this fluke of PHP that lets you place the try...catch block up the stack from the actual point of error could be used to implement a neat shift in error-handling architecture, where the caller gets to decide how to proceed after an error.
jd at wuputah dot com
06-May-2005 07:15
PHP5 supports exception throwing inside a function, and catching it outside that function call. There is no mention of this in documentation but it works just fine, as tested by this sample code:

<?php

function exceptionFunction() {
       throw new
Exception("Throwing an exception!");
}

try {
      
exceptionFunction();
} catch (
Exception $e) {
       echo
"Exception caught!\n";
}

?>

The result in PHP 5.0.3 is "Exception caught!"

Further tests show that nested functions with exceptions, methods throwing exceptions, etc all work the same way. This is like declaring all classes (or methods) in Java as "class ClassName throws Exception". While I consider this a good thing, you should be aware that any thrown exception will propagate up your stack until it is either caught or runs out of stack.
ravindra at gatewaytechnolabs dot com
29-Oct-2004 01:34
<?php
/*I add here example for nested Exception Handling.*/
 
try
 {
   try
   {
     throw new
exception();
   }
   catch(
exception $m)
   {
   print
$m;
   print
"<br>";
   print
"inner exception"."<br>";
   }
   throw new
exception();
 }
 catch(
exception $e)
 {
  print
$e;
  print
"outer exception";
 }
 
?>
gomikochar at yahoo dot com
10-Oct-2004 07:00
To re-throw an exception, you must specify the name of the variable after throw in the catch block, i.e.,

<?php

try {
  try {
   throw new
Exception("Unknown error");
  }
  catch (
Exception $ie) {  // Inner Catch Block
  
throw;  // this will NOT work; parse error
  
throw $ie// this will re-throw the exception to the outer catch block
 
}
}
catch (
Exception $oe) {  // Outer Catch Block
 
echo $oe;
}

?>
php5 at grapio dot nl
06-Oct-2004 06:16
The base exception class, which is build in PHP5 has also a function getLine(). This is as expected if you look at the class define. But it is not noticed there.
I had just this code:
<?php
try
{
     throw new
Exception("test")
}
catch (
Exception $e)
{
  echo
$e->getLine()
}
?>
And this worked.
ravindra at gatewaytechnolabs dot com
01-Oct-2004 04:23
Like Java php5 also supports nesting of try catch.
moirae at centrum dot cz
21-Aug-2004 06:16
Really good article about exceptions in php5: http://www.zend.com/php5/articles/php5-exceptions.php

Citas célebres

Aprender a no hacer caso de las cosas es uno de los grandes caminos hacia la paz interior.

Roberto J. Sawyer
Escritor canadiense
(n. 1960)
Citas en tu mail
©Contenidos Gratis

Ilusiones Opticas
ilusion_optica_031.jpg
Contenidos Web

Chiste de... Animales
Vaca económica

- ¿Es verdad que la vaca que compró en la feria de ganado le ha salido muy económica?

- Muchísimo, desde que la compré no ha querido comer nada...
Chistes en tu mail
©ContenidosGratis

Humor Gráfico
humor_grafico_009.jpg
Contenidos Web

Inicio | Acción | Estrategia | Palabras | Puzzles | Solitarios | Foro Trucos
Cake ManiaCake Mania
Jugadores: 6835
Categoría del juego: Acción
Objetivo del juego: Ayuda a Jill a recuperar la pastelería de su abuela llevando su propia pastelería; consigue clientes y gana dinero.
Rainbow WebRainbow Web
Jugadores: 2199
Categoría del juego: Puzzles
Objetivo del juego: Rompe un pegajoso hechizo y salva un reino de fantasía en Rainbow Web. Tendrás toneladas de diversión mientras juegas a este mágico desafío para la mente.
Mahjongg FortunaMahjongg Fortuna
Jugadores: 12462
Categoría del juego: Solitarios
Objetivo del juego: Velocidad y habilidad mental son las armas más importantes en esta versión de un antiguo juego asiático. Despeja el tablero lo antes posible haciendo clic en las fichas iguales y gánate la fama eterna de la puntuación más alta.
Chainz 2Chainz 2
Jugadores: 6955
Categoría del juego: Puzzles
Objetivo del juego: Entra en el mundo de las combinaciones con Chainz 2: Relinked, emocionante secuela del exitazo del año pasado, Chainz. Gira eslabones y crea combinaciones de 3 ó más.
DeliciousDelicious
Jugadores: 4405
Categoría del juego: Acción
Objetivo del juego: ¿Eres un as de la multitarea? ¿Quieres que tus clientes estén contentos? ¡Pues Delicious es tu juego! Sacia el apetito de los clientes y tenlos contentos; ¡no te arriesgues!
BookwormBookworm
Jugadores: 4568
Categoría del juego: Palabras
Objetivo del juego: Junta las letras para formar palabras. ¡Las palabras más largas valen más puntos!
ZumaZuma
Jugadores: 4976
Categoría del juego: Acción
Objetivo del juego: Controla el ídolo de la rana de piedra de los antiguos Zuma en este intrigante enigma de acción. ¡Dispara bolas para formar conjuntos de tres, pero si dejas que lleguen a la calavera dorada morirás!
Jewel of AtlantisJewel of Atlantis
Jugadores: 3798
Categoría del juego: Puzzles
Objetivo del juego: Descubre la ciudad hundida de la Atlántida y busca valiosos tesoros. Viaja más allá de las profundidades del mar y vive trepidantes aventuras en Jewel of Atlantis.
Jewel QuestJewel Quest
Jugadores: 3727
Categoría del juego: Puzzles
Objetivo del juego: Convierte la arena de la antigua selva en oro tan rápido como puedas juntando grupos de 3 elementos. ¡Los grupos más grandes valen más puntos!
Bejeweled 2Bejeweled 2
Jugadores: 3659
Categoría del juego: Puzzles
Objetivo del juego: Con cuatro modos de juego únicos y fascinantes, nuevas piezas de juego explosivas e imponentes fondos planetarios, Bejeweled 2 es mucho más adictivo que nunca.
Contenidos gratis en tu webSiguiente >>

Fotos divertidas
fotos_increibles_0096.jpg
Contenidos Web
microrobots avion deportes riesgo recetas cocina canaria juegos online gratis moto motociclismo horoscopos naranjas valencianas surf canarias montañismo ciudades turismo postales gratis library Horoscopos Diarios Windsurf Canarias
fregadero microondas placa electrica bañopreparar camper pantalla plananevera compresor electricacamper fiat ducato camper baño quimicomampara enrollable bañocamper aire climatizadofurgoneta surf windsurffurgoneta surf windsurftelevisor furgonetas camperfurgonetas camper cama

Sudoku del día
Nivel de dificultad: Fácil



Cómo jugar:
El juego consiste en colocar los números del 1 al nueve de tal forma que no se repita el mismo número en la columna, fila y caja (bloques 3x3 enmarcados).

©Contenidos Gratis | Sudoku en tu mail

Warning: array_rand(): First argument has to be an array in /var/www/html/contenidos/efemerides.php on line 14
Sucedió el...

31 de agosto de

Efemérides en tu mail
©Contenidos Gratis
windsurf canarias youtube porno canarias baleares valencia madrid