Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Formatierungs-Strings mit dynamischer Anzahl von Argumenten

  1. #1
    Registrierter Benutzer Avatar von CaptainAlphabet
    Registriert seit
    27.11.2003
    Ort
    /lost+found
    Beiträge
    39

    Formatierungs-Strings mit dynamischer Anzahl von Argumenten

    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:
    PHP-Code:
    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:
    PHP-Code:
    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
    For me code has more in common with poetry or some kind of writing. The beauty of
    it is in structure, in putting ideas across, one at the time and clear it away. - Alan Cox

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    Du willst also internationalisieren/lokalisieren? Da ist es eher üblich, die in vielen Programmiersprachen vorhandenen gettext-Mechanismen zu nutzen. Schau Dir mal http://de.php.net/gettext an.

    Jan

  3. #3
    Registrierter Benutzer Avatar von CaptainAlphabet
    Registriert seit
    27.11.2003
    Ort
    /lost+found
    Beiträge
    39
    Zitat Zitat von jan61 Beitrag anzeigen
    Du willst also internationalisieren/lokalisieren?
    Eigentlich diente dieses Beispiel nur der Veranschaulichung dessen, dass die momentane Umsetzung einfach unflexibel ist.

    Trotzdem danke ich dir für den Link. Leider ist gettext aber nicht das, was ich suche. Es geht mir schon darum, Strings Variablen zu übergeben, unabhängig davon, wie viele.
    For me code has more in common with poetry or some kind of writing. The beauty of
    it is in structure, in putting ideas across, one at the time and clear it away. - Alan Cox

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Zitat Zitat von CaptainAlphabet Beitrag anzeigen
    Eigentlich diente dieses Beispiel nur der Veranschaulichung dessen, dass die momentane Umsetzung einfach unflexibel ist. ...
    Hmm - ich will ja nicht klugscheissern, aber ich habe einfach mal die allwissende Müllhalde gefragt. Auf meine Frage "php +varargs" hat Google mir 38.000 Treffer ausgespuckt, der erste war: http://de3.php.net/func_get_arg. Passt das?

    Jan

  5. #5
    Registrierter Benutzer Avatar von CaptainAlphabet
    Registriert seit
    27.11.2003
    Ort
    /lost+found
    Beiträge
    39
    Das bringt in diesem Fall nichts, weil die Funktion immer nur zwei Argumente erhält, nämlich einen Code und ein optionales Objekt. Nur die Objekteigenschaften, die sich die Meldungen rauspicken, sind jedes Mal anders.
    For me code has more in common with poetry or some kind of writing. The beauty of
    it is in structure, in putting ideas across, one at the time and clear it away. - Alan Cox

  6. #6
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Zitat Zitat von CaptainAlphabet Beitrag anzeigen
    Das bringt in diesem Fall nichts, weil die Funktion immer nur zwei Argumente erhält, nämlich einen Code und ein optionales Objekt. Nur die Objekteigenschaften, die sich die Meldungen rauspicken, sind jedes Mal anders.
    Dann bleibt Dir wohl nur 1 Möglichkeit: Einen eigenen Parser schreiben.

    Jan

  7. #7
    Registrierter Benutzer Avatar von CaptainAlphabet
    Registriert seit
    27.11.2003
    Ort
    /lost+found
    Beiträge
    39
    Ach, ich denke, ich werde die Strings mit den Variablenaufrufen an eine eval()-Funktion übergeben. Das wird das Einfachste sein.

    Danke für deine Zeit und lass es dir gutgehen!
    For me code has more in common with poetry or some kind of writing. The beauty of
    it is in structure, in putting ideas across, one at the time and clear it away. - Alan Cox

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •