Mailinglisten-Archive |
Klaus Schmidt wrote:
> <?
> function array_make_hiddens($r) {
> $htmlstart='<input type=hidden ';
> $htmlende=" >\n";
> for (reset($r);$k=key($r);next($r) ) { // Fehlerzeile
> $html.="$htmlstart name=\"$k\" value=\"".urlencode($r[$k])."\"$htmlende";
> }
> return $html;
> }
>
> echo '<form>';
> echo array_make_hiddens(&$GLOBALS); // geht hier nur mit '&'
> echo '</form>';
> ?>
>
> Das Prob liegt darin, dass _hier_ ohne den call by referenz (&)
> ein
>
> Warning: Variable passed to reset() is not an array or
> object in c:\usr\htdocs\ksweb\providercheck.php3 on line 5
>
> auftritt, was ich absolut nicht begreife ;-o
> denn unter php4 geht's (logischer Weise) mit und ohne '&'
Funktioniert nicht mit meinem angestaubten 3.0.15.
> Prüfe ich vorher $r (was ja $GLOBALS sein sollte)
> (ohne den & CBR) ist $r ein leerer String.
Ich tippe auf einen Bug bei den Referenzen, aber das ist geraten. PHP
hat in allen Versionen, die ich bislang gesehen habe, Probleme mit
Referenzen. $GLOBALS ist eine globale Variable, die alle globalen
Variablen also auch eine Referenz auf sich selbst enthält. Vielleicht
stolpert PHP 3 darüber, siehe auch die print_r() Warnung im Manual.
> Setze ich $GLOBALS direkt in die Schleife ein gehts auch
> aber dass solls ja nicht sein :-))
Schreibe eine etwas andere Signatur für die Funktion und verzichte auf
das "call time by reference". Zumindest mein altes PHP 3 war
anschließend glücklich.
function array_make_hiddens(&$r) {
...
}
Ulf
php::bar PHP Wiki - Listenarchive