Re: catching exception using a variable passed by reference
| From: | Devis Lucato | Date: | Sun, 06 May 2012 11:10:50 +0000 |
| Subject: | Re: catching exception using a variable passed by reference | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-60491@lists.php.net to get a copy of this message | ||
Hi Laruence,
the solution you suggest would work though it makes it all a bit more
verbose...
I noticed also that the original variable is completely removed from the
function scope, which is probably a bug.
I'll raise a ticket, thank you ;-)
Devis
On 6 May 2012 05:04, Laruence <laruence@php.net> wrote:
> On Sun, May 6, 2012 at 11:47 AM, Laruence <laruence@php.net> wrote:
> > On Sun, May 6, 2012 at 8:40 AM, Devis Lucato <devis@lucato.it> wrote:
> >> Hi,
> >>
> >> I stumbled upon this code while working with a variable passed by
> >> reference, I was wondering if someone could provide some feedback before
> >> raising a ticket, just in case PHP (5.3.6) is doing what it's supposed
> to
> >> do.
> >> In the code below I would expect "catch" to change the variable as
> >> an assignment would do, but that doesn't happen.
> >>
> >> function foo(&$exception)
> >>> {
> >>> try {
> >>> throw new Exception('foo error');
> >>> } catch (Exception $exception) {
> >>> var_dump(gettype($exception));
> >>> echo $exception->getMessage() . "\n";
> >>> }
> >>> }
> >>> foo($error);
> >>> var_dump(gettype($error));
> >>
> >>
> >>
> >> Expected:
> >>
> >>> string(6) "object"
> >>> foo error
> >>> string(6) "object"
> >>
> >>
> >> Current result:
> >>
> >>> string(6) "object"
> >>> foo error
> >>> string(4) "NULL"
> >>
> >>
> >>
> >> It looks like "catch" is creating a completely new variable in the
> scope,
> >> also removing the existing one from it.
> Hi:
> after a deep look, I think it's not a bug.
>
> the exception in the catch block is only a local var of that block.
>
> I think you should change you codes like following to accomplish
> your requirement:
>
> function foo(&$exception)
> {
> try {
> throw new Exception('foo error');
> } catch (Exception $e) {
> var_dump(gettype($e));
> $exception = $e;
> echo $e->getMessage() . "\n";
> }
> }
> foo($error);
> var_dump(gettype($error));
>
> thanks
> > Hi,
> >
> > could you file a bug at bugs.php.net? :)
> >
> > thanks
> >> I appreciate this is an edge case, if not a bug is it worth adding it to
> >> http://php.net/manual/en/language.exceptions.php or
> >> somewhere under
> >> http://www.php.net/manual/en/language.references.php ?
> >>
> >>
> >> Thank you!
> >
> >
> >
> > --
> > Laruence Xinchen Hui
> > http://www.laruence.com/
>
>
>
> --
> Laruence Xinchen Hui
> http://www.laruence.com/
>