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/ -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php