|
użytkowników online: 69
|
OPINIE UŻYTKOWNIKÓW
|
Porady zamieszczone tutaj przez Darka są pomocne w wielu chwilach. Wielokrotnie tworząc jakiś złożony serwis korzystam z tych porad. Można by tworzyć samemu te skrypty, ale tak naprawdę czy nie lepiej jest wziąć skrypt z tej strony i zmodyfikowac go dla swoich potrzeb? Wprawdzie możemy taki skrypt napisać sami, ale po co, skoro stracimy czas na coś, co ktoś juz napisał, przetestował i może zagwarantować, że działa poprawnie. Któryś raz z rzędu opłacam abonament i nie raz jeszcze opłacę. Kawał dobrej roboty i ogrom wiedzy w jednym miejscu.
Piotr Karamański Design Studio
|
|
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net
[Spis]
[A]
[B]
[C]
[D]
[E]
[F]
[G]
[H]
[I]
[J]
[K]
[L]
[M]
[N]
[O]
[P]
[Q]
[R]
[S]
[T]
[U]
[V]
[X]
[W]
[Z]
Rozdział 20. Exceptions
PHP 5 has an exception model similar to that of other programming languages.
An exception can be thrown, try and caught within PHP. A Try block must
include at least one catch block. Multiple catch blocks can be used to
catch different classtypes; execution will continue after that last catch
block defined in sequence. Exceptions can be thrown within catch blocks.
When an exception is thrown, code following the statement will not be
executed and PHP will attempt to find the first matching catch block. If an
exception is not caught a PHP Fatal Error will be issued with an Uncaught
Exception message, unless there has been a handler defined with
set_exception_handler().
Przykład 20-1. Throwing an Exception |
<?php
try {
$error = 'Always throw this error';
throw new Exception($error);
echo 'Never executed';
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
echo 'Hello World';
?>
|
|
A User defined Exception class can be defined by extending the built-in
Exception class. The members and properties below, show what is accessible
within the child class that derives from the built-in Exception class.
Przykład 20-2. The Built in Exception class |
<?php
class Exception
{
protected $message = 'Unknown exception'; protected $code = 0; protected $file; protected $line; function __construct($message = null, $code = 0);
final function getMessage(); final function getCode(); final function getFile(); final function getLine(); final function getTrace(); final function getTraceAsString(); function __toString(); }
?>
|
|
If a class extends the built-in Exception class and re-defines the constructor, it is highly recomended
that it also call parent::__construct()
to ensure all available data has been properly assigned. The __toString() method can be overriden
to provide a custom output when the object is presented as a string.
Przykład 20-3. Extending the Exception class |
<?php
class MyException extends Exception
{
public function __construct($message, $code = 0) {
parent::__construct($message, $code);
}
public function __toString() {
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
}
public function customFunction() {
echo "A Custom function for this type of exception\n";
}
}
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 new MyException('1 is an invalid parameter', 5);
break;
case self::THROW_DEFAULT:
throw new Exception('2 isnt allowed as a parameter', 6);
break;
default:
$this->var = $avalue;
break;
}
}
}
try {
$o = new TestException(TestException::THROW_CUSTOM);
} catch (MyException $e) { echo "Caught my exception\n", $e;
$e->customFunction();
} catch (Exception $e) { echo "Caught Default Exception\n", $e;
}
var_dump($o);
echo "\n\n";
try {
$o = new TestException(TestException::THROW_DEFAULT);
} catch (MyException $e) { echo "Caught my exception\n", $e;
$e->customFunction();
} catch (Exception $e) { echo "Caught Default Exception\n", $e;
}
var_dump($o);
echo "\n\n";
try {
$o = new TestException(TestException::THROW_CUSTOM);
} catch (Exception $e) { echo "Default Exception caught\n", $e;
}
var_dump($o);
echo "\n\n";
try {
$o = new TestException();
} catch (Exception $e) { echo "Default Exception caught\n", $e;
}
var_dump($o);
echo "\n\n";
?>
|
|
User Contributed Notesgerry03 at 4warding dot com
14-Nov-2005 06:39
Carlos Konstanski
30-Sep-2005 07: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
07-May-2005 04: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 10:34
<?php
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 04: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) { throw; throw $ie; }
}
catch (Exception $oe) { echo $oe;
}
?>
php5 at grapio dot nl
07-Oct-2004 03: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 01:23
Like Java php5 also supports nesting of try catch.
moirae at centrum dot cz
21-Aug-2004 03:16
|