CaptainAlphabet
17-12-2007, 18:55
Guten Abend!
Ich arbeite gerade an einer Funktion zur Ausgabe von Meldungen an den User, die teilweise um Informationen aus einem an die Funktion übergebenen Objekt ergänzt werden. Die momentan fest in die Funktion eingebauten Meldungen würde ich gerne auslagern, sodass man theoretisch auch ganz leicht andere Sprachen verwenden könnte, ohne die Funktion abändern zu müssen.
Aktuelle Umsetzung in vereinfachter Form dargestellt:
function getMessage($code, $obj = null)
{
switch ($code)
{
case 'inuse': $msg = "{$obj->label} ist bereits vergeben."; break;
case 'login': $msg = "Login fehlgeschlagen."; break;
case 'maxlength': $msg = "{$obj->label} darf maximal {$obj->maxlength} Zeichen lang sein."; break;
}
return $msg;
}
Nun habe ich mir überlegt, die Meldungen außerhalb der Funktion als Formatierungs-Strings zu definieren. Da die Meldungen aber unterschiedliche und unterschiedlich viele Eigenschaften des übergebenen Objekts abrufen, kann ich keine festgelegten Argumente an die Funktion sprintf() übergeben.
Überlegter Lösungsansatz, der aber ein Problem mit sich bringt:
define(MSG_IN_USE, "%s ist bereits vergeben.");
define(MSG_LOGIN_FAILED, "Login fehlgeschlagen.");
define(MSG_MAX_LENGTH, "%s darf maximal %u Zeichen lang sein.");
function getMessage($code, $obj = null)
{
switch ($code)
{
case 'inuse': $msg = MSG_IN_USE; break;
case 'login': $msg = MSG_LOGIN_FAILED; break;
case 'maxlength': $msg = MSG_MAX_LENGTH; break;
}
return sprintf($msg, $obj->var_1, $obj->var_2, $obj->var_n);
}
Gibt es für diesen Ansatz eine brauchbare Lösung oder sollte ich hier doch mit den Meldungs-Strings aus der ersten Variante arbeiten und diese durch eine eval()-Funktion schicken?
Mit freundlichen Grüßen
CaptainAlphabet
Ich arbeite gerade an einer Funktion zur Ausgabe von Meldungen an den User, die teilweise um Informationen aus einem an die Funktion übergebenen Objekt ergänzt werden. Die momentan fest in die Funktion eingebauten Meldungen würde ich gerne auslagern, sodass man theoretisch auch ganz leicht andere Sprachen verwenden könnte, ohne die Funktion abändern zu müssen.
Aktuelle Umsetzung in vereinfachter Form dargestellt:
function getMessage($code, $obj = null)
{
switch ($code)
{
case 'inuse': $msg = "{$obj->label} ist bereits vergeben."; break;
case 'login': $msg = "Login fehlgeschlagen."; break;
case 'maxlength': $msg = "{$obj->label} darf maximal {$obj->maxlength} Zeichen lang sein."; break;
}
return $msg;
}
Nun habe ich mir überlegt, die Meldungen außerhalb der Funktion als Formatierungs-Strings zu definieren. Da die Meldungen aber unterschiedliche und unterschiedlich viele Eigenschaften des übergebenen Objekts abrufen, kann ich keine festgelegten Argumente an die Funktion sprintf() übergeben.
Überlegter Lösungsansatz, der aber ein Problem mit sich bringt:
define(MSG_IN_USE, "%s ist bereits vergeben.");
define(MSG_LOGIN_FAILED, "Login fehlgeschlagen.");
define(MSG_MAX_LENGTH, "%s darf maximal %u Zeichen lang sein.");
function getMessage($code, $obj = null)
{
switch ($code)
{
case 'inuse': $msg = MSG_IN_USE; break;
case 'login': $msg = MSG_LOGIN_FAILED; break;
case 'maxlength': $msg = MSG_MAX_LENGTH; break;
}
return sprintf($msg, $obj->var_1, $obj->var_2, $obj->var_n);
}
Gibt es für diesen Ansatz eine brauchbare Lösung oder sollte ich hier doch mit den Meldungs-Strings aus der ersten Variante arbeiten und diese durch eine eval()-Funktion schicken?
Mit freundlichen Grüßen
CaptainAlphabet