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 <larue...@php.net> wrote: > On Sun, May 6, 2012 at 11:47 AM, Laruence <larue...@php.net> wrote: > > On Sun, May 6, 2012 at 8:40 AM, Devis Lucato <de...@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/ >