Globale dynamische Variablen
Benjamin Wilfing
- php
Hallo,
ich stehe mal wieder vor einem Problem: Ich schreibe eine Funktion, die eine Überschrift und einen Text zu einem beliebigen HTTP-Fehler ausgibt.
In einer externen Configdatei, die includet wird, gibt es für jeden HTTP-Errorcode 2 Variablen, die vom Namen her gleich aufgebaut sind:
$http_[code]_title = ""; // Überschrift für Meldung
$http_[code]_msg = ""; // Text der Meldung
Diese will ich dann über die Funktion sendHttpErrorMsg($errno) ausgeben lassen. Damit ich keine switch-Anweisung wegen der vielen möglichen HTTP-Errorcodes basteln muß, löse ich das Problem über dynamische Variablen (Funktion vereinfacht dargestellt).
function sendHttpErrorMsg($errno) {
echo "<h1>".${"http_".$errno."_title"}."</h1>";
echo "<p>".${"http_".$errno."_msg"}."</p>";
}
Da ich hier nun die Variablen aus der Configdatei innerhalb einer Funktion benutze, muß ich sie "globalisieren". Da müßte ich aber nun wieder alle HTTP-Codes einzeln global verfügbar machen. Daher dachte ich an so etwas wie
function sendHttpErrorMsg($errno) {
global ${"http_".$errno."_title"};
global ${"http_".$errno."_msg"};
...
}
, damit die Funktion für jede Zahl verwendbar ist. Das funktioniert aber leider nicht, da bekomme ich einen Parse Error:
Parse error: parse error, expecting STRING' or
'$'' in functions.inc on line 56
Sobald ich aber die Variablen direkt bennene (z.B. global $http_401_title;), funktioniert es.
Was mache ich in der global-Anweisung falsch ? Darf man keine dynamischen Variablen globalisieren ?
Danke und
Viele Grüße aus Darmstadt,
Benjamin
Hi,
$http_[code]_title = ""; // Überschrift für Meldung
$http_[code]_msg = ""; // Text der Meldung
humpf. Was hälst Du von $http_title[$code], also z.B. $http_title[404]? Mit einem Array hättest Du Dir dieses und andere Probleme gespart.
Oder $http[$code]['title'], wenn Du konsequent sein willst ;-)
Cheatah
Hallo,
Oder $http[$code]['title'], wenn Du konsequent sein willst ;-)
stimmt, das ist die wohl beste Lösung. Darauf wäre ich im Leben nicht gekommen...
muchas gracias :-)
Grüße aus Darmstadt,
Benjamin
function sendHttpErrorMsg($errno) {
global ${"http_".$errno."_title"};
global ${"http_".$errno."_msg"};
...
}
, damit die Funktion für jede Zahl verwendbar ist. Das funktioniert aber leider nicht, da bekomme ich einen Parse Error:
Parse error: parse error, expecting
STRING' or
'$'' in functions.inc on line 56
Würde sagen, das ist eine Aufgabe für eval().
Versuch mal sowas wie
eval ('global ${"http_' . $errno . '_title");');
Hi,
Würde sagen, das ist eine Aufgabe für eval().
würde sagen, eval() sollte vermieden werden, solange das mit überschaubarem Aufwand (unter einem Manntag) machbar ist. eval() is evil().
Cheatah