Re[2]: [PHP] pass by reference
| From: | Tom Rogers | Date: | Tue, 14 Jan 2003 02:38:15 +0000 |
| Subject: | Re[2]: [PHP] pass by reference | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-131501@lists.php.net to get a copy of this message | ||
Hi,
Tuesday, January 14, 2003, 11:01:33 AM, you wrote:
P> -----BEGIN PGP SIGNED MESSAGE-----
P> Hash: SHA1
P> On Monday 13 January 2003 20:01, Tom Rogers wrote:
>> Hi,
>>
>> Tuesday, January 14, 2003, 9:36:57 AM, you wrote:
>> P> -----BEGIN PGP SIGNED MESSAGE-----
>> P> Hash: SHA1
>>
>> P> I did a complex class that works with XML parsing and complex structured
>> where P> I used references extensivly and now I'm surprised with:
>>
>> P> Warning: Call-time pass-by-reference has been deprecated - argument
>> passed by P> value; If you would like to pass it by reference, modify the
>> declaration of P> array_push(). If you would like to enable call-time
>> pass-by-reference, you P> can set allow_call_time_pass_reference to true in
>> your INI file. However, P> future versions may not support this any longer.
>>
>> P> I can't modify the php.ini since I'm in a shared but the problem is
>> deeper. P> Why was it deprecated ? what replaced it ? is there any work
>> arround ? P> My 200 lines of code without references could take much, much
>> longer and be P> much, much more messy.
>> P> Any ideas ?
>> P> Thanks.
>> P> - --
>> P> Pupeno: pupeno@pupeno.com
>> P> http://www.pupeno.com
>> P> - ---
>> P> Help the hungry children of Argentina,
>> P> please go to (and make it your homepage):
>> P>
>> P> http://www.porloschicos.com/servlet/PorLosChicos?comando=donar
>> P> -----BEGIN PGP SIGNATURE-----
>> P> Version: GnuPG v1.0.7 (GNU/Linux)
>>
>> P> iD8DBQE+I02cLr8z5XzmSDQRAs/0AKCyf+UG0uZdbwG30WFU0UUNVWO7BwCgnCn5
>> P> 2LmOOJi8uX+1dOqUfCTatSE=
>> P> =5obN
>> P> -----END PGP SIGNATURE-----
>>
>> I am sure array_push accepts the array as a reference so there is no need
>> to use the & operator in the call. At least thats how it works in a simple
>> class.....
P> No, I mean, what you're pushing inside the array is a reference:
P> array_push($anArrayOfReferences, &$thisIsAVariable);
P> that doesn't work, but I replaced by
P> $anArrayOfReferences[count($anArrayOfReferences)] = &$thisIsAVariable;
P> Thanks :)
Ok :)
These 2 functions will do what you want I think...
function array_ref_push(&$array,&$ref){
$array[] =& $ref;
}
function &array_ref_pop(&$array){
$r =& $array[count($array)-1];
array_pop($array); //throw away a real pop
return $r;
}
//Testing
$stack = array();
$var = 1;
array_ref_push($stack,$var);
echo '<pre>';
print_r($stack);
echo '</pre>';
$var = 2;
echo '<pre>';
print_r($stack);
echo '</pre>';
$var2 =& array_ref_pop($stack);
echo 'var2 = '.$var2.'<br>';
$var = 3;
echo 'var2 = '.$var2.'<br>';
echo '<pre>';
print_r($stack);
echo '</pre>';
--
regards,
Tom