Re: [PHP] Exception not being caught

2009-07-16 Thread Weston C
On Thu, Jul 16, 2009 at 7:42 AM, David
Otton wrote:
>> If it's catchable, why isn't it caught in my example?
>
> It's not an exception, it's a "fatal error". Fatal errors are caught
> by error handling functions, not by catch blocks.
>
> Consequence of having (at least) two separate error handling
> mechanisms in the same language.

That's definitely confusing, but more confusing to me is labeling the
fatal error as "catchable", which definitely implies a try / catch
block should handle it.

Maybe they should call it a "handleable" fatal error :) ... implying
it can be managed with set_error_handler().

On Thu, Jul 16, 2009 at 9:38 AM, Martin Scotta wrote:
...
> http://ar.php.net/manual/es/function.set-error-handler.php
...
> You can write a simple handler or a fully featured one, but the essence is
> the same...
>
> function errorHandler(/*args*/)
> {
> $e = new Exception( $message, $code );
> throw $e;
> }

This looks like a great idea -- I was thinking I'd have to give up the
convenient flow control involved in exception handling, but this
should bring it back nicely.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Exception not being caught

2009-07-16 Thread Martin Scotta
There are many examples of error_handlers at
http://ar.php.net/manual/es/function.set-error-handler.php

The handler only have to cast the error to exception.

YOu can write a simple handler or a fully featured one, but the essence is
the same...

function errorHandler(/*args*/)
{
$e = new Exception( $message, $code );
throw $e;
}

On Thu, Jul 16, 2009 at 8:42 AM, David Otton <
phpm...@jawbone.freeserve.co.uk> wrote:

> 2009/7/15 Weston C :
>
> >  >
> > class A { }
> >
> > $a = new A();   // Ayn would be proud, right?
> >
> > try {
> >echo "a is ",$a,"\n";
> > } catch(Exception $e) {
> >echo "\nException Caught: ";
> >echo $e, $n;
> > }
> >
> > ?>
> >
> > This does not run as expected. I'd think that when the implicit string
> > conversion in the try block hits, the exception would be thrown,
> > caught by the catch block, and relayed.
> >
> > Instead you don't ever see the words "exception caught" and you get
> > "Catchable fatal error: Object of class A could not be converted to
> > string."
> >
> > If it's catchable, why isn't it caught in my example?
>
> It's not an exception, it's a "fatal error". Fatal errors are caught
> by error handling functions, not by catch blocks.
>
> Consequence of having (at least) two separate error handling
> mechanisms in the same language.
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>


-- 
Martin Scotta


Re: [PHP] Exception not being caught

2009-07-16 Thread David Otton
2009/7/15 Weston C :

> 
> class A { }
>
> $a = new A();                           // Ayn would be proud, right?
>
> try {
>    echo "a is ",$a,"\n";
> } catch(Exception $e) {
>    echo "\nException Caught: ";
>    echo $e, $n;
> }
>
> ?>
>
> This does not run as expected. I'd think that when the implicit string
> conversion in the try block hits, the exception would be thrown,
> caught by the catch block, and relayed.
>
> Instead you don't ever see the words "exception caught" and you get
> "Catchable fatal error: Object of class A could not be converted to
> string."
>
> If it's catchable, why isn't it caught in my example?

It's not an exception, it's a "fatal error". Fatal errors are caught
by error handling functions, not by catch blocks.

Consequence of having (at least) two separate error handling
mechanisms in the same language.

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP] Exception not being caught

2009-07-15 Thread Weston C
So, I've got a little piece of code designed to play with catching the
exception that's thrown when an object doesn't have a __toString
method.



This does not run as expected. I'd think that when the implicit string
conversion in the try block hits, the exception would be thrown,
caught by the catch block, and relayed.

Instead you don't ever see the words "exception caught" and you get
"Catchable fatal error: Object of class A could not be converted to
string."

If it's catchable, why isn't it caught in my example?

Thanks,

Weston

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php