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