phpbar.de logo

Mailinglisten-Archive

[php] $GLOBALS

[php] $GLOBALS

Ulf Wendel ulf.wendel_(at)_phpdoc.de
Thu, 07 Dec 2000 10:23:40 +0100


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