On Monday 24 July 2006 10:52, Rishad Omar wrote: > Hello, > > I've upgraded from 5.1.1 to 5.1.2 and discovered the following > unexpected difference. Best shown by example. > > <? > function getArray(&$arr) > { > $arr[] = 12; > } > > getArray($p = array()); > print_r($p); > ?> > > In php 5.1.1, the $p is passed correctly as reference and so returns > with the value 12 in its first element. I regard this as correct > behaviour. In php 5.1.2, the $p is passed by value. So on return, $p > is still empty! This can be fixed as follows: > $p = array(); > getArray($p); > > > > The following example works, as expected, in both 5.1.1 and 5.1.2. > > <? > class A > { > public $i = 9; > } > > > function doAmend(A &$a) // & not required because class instance > passed by reference by default > { > $a->i += 30; > } > > doAmend($b = new A); > print_r($b); // this prints the value of member i as 39 > as expected. > > ?> I'm guessing it has something to do with a memory leak. Either that, or scope; creating a variable inside of a function call probably goes out of scope after the function returns. Enable error_reporting(E_ALL| E_STRICT) and see what happens. -- Matt Sicker
pgpe22qtEnE6R.pgp
Description: PGP signature