[PHP-DEV] PHP 4.0 Bug #7578 Updated: next() and current() do not return referenceing arrays From: stas <email protected>
Date: 11/05/00

ID: 7578
Updated by: stas
Reported By: mog <email protected>
Status: Open
Bug Type: Feature/Change Request
Assigned To:
Comments:

There's no & operation in PHP. Thus, you cannot use it in expressions, including array(). There's =& operator and &$var syntax for passing variables by reference.

Also, if language doesn't do what you need for a particular project, it's usually not good enough reason to change the language. Anyway, I move it to feature requests.

Previous Comments:
---------------------------------------------------------------------------

[2000-11-02 22:12:58] mog <email protected>
1. yes, i have read the manual on references explained.

2. ok, array(&$array2) might not work but i can't see why.

what if we make it like this? shouldn't this work
or it should work like this if current(), reset(), prev() and next() were modified to return references instead.

<?PHP
$array = array(array(0,1,2));

print current(current($array))."<br>"; // returns 0

print "<b>Try 1!</b><br>";
print next(current($array))."<br>"; // returns 1, correct but the internal pointer is only moved in the copy current() returned
print current(current($array))."<br>"; // returns 0, wrong, should be 1
print current($array[0])."<br>"; //returns 0, wrong, should be 1

print "<b>Try 2!</b><br>";
print next($array[0])."<br>";
print current(current($array))."<br>"; // returns 0, wrong, should be 1
print current($array[0])."<br>"; // returns 1, yes, correct! but the code above still didn't work!
?>

I really think that this behaviour should be changed, i need it for a project i'm working with.

---------------------------------------------------------------------------

[2000-11-01 19:43:52] waldschrott <email protected>
you simply can´t do it that way, please read the manual on foreach() etc. and that additional "&" in
> $array = array(&$array2);
has absolutely no effect here, at least not what you expect it to do (please also read "references explained")

> print next(current($array))."<br>"; // returns 1, correct > but the internal
> pointer is only moved in the copy current() returned

sure, current($array) returns a copy and thus all results you´ve mentioned are fine

---------------------------------------------------------------------------

[2000-11-01 19:29:27] mog <email protected>
i hope you can see what is wrong in the code below

<?PHP
$array2 = array(0,1,2);
$array = array(&$array2);

print current(current($array))."<br>"; // returns 0

print "<b>Try 1!</b><br>";
print next(current($array))."<br>"; // returns 1, correct but the internal pointer is only moved in the copy current() returned
print current(current($array))."<br>"; // returns 0, wrong, should be 1
print current($array2)."<br>"; //returns 0, wrong, should be 1

print "<b>Try 2!</b><br>";
print next($array[0])."<br>";
print current(current($array))."<br>"; // returns 0, wrong, should be 1
print current($array[0])."<br>"; // returns 1, yes, correct! but the code above still didn't work!
?>

---------------------------------------------------------------------------

Full Bug description available at: http://bugs.php.net/?id=7578

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: php-dev-unsubscribe <email protected>
For additional commands, e-mail: php-dev-help <email protected>
To contact the list administrators, e-mail: php-list-admin <email protected>