Variable Variablen (oder so ähnlich)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Variable Variablen (oder so ähnlich)

    Hallo,

    da ich nichts Vergleichbares gefunden habe, poste ich mal.

    Zuerst die Ursache des Problems:

    Eine Community in 4 Sprachen. Alle festen Texte werden aus Sprachdateien geholt.

    In einige dieser Fest-Texte müssen jedoch variable Inhalte eingefügt werden, z.B. Alter, Geschlecht usw.

    Dadurch, dass verschiedene Sprachen nunmal eine unterschiedliche Syntax im Satzbau verwenden, sehe ich darin ein Problem und finde keine Lösung. (Da ich die Sätze ja nicht aus einzelnen Wörtern bilden kann.)

    Angenommen, ich möchte folgenden Satz ausgeben:

    "ADco ist 97 Jahre alt, männlich und wohnt in einer eigenen Wohnung. Zu seinen Hobbys zählen blah, blah und blah."

    In der Sprachdatei müsste die Variable für diesen Satz also so aussehen:

    $VTXT[1]="$nick ist $alter Jahre alt, $geschlecht und wohnt $wohnart. Zu seinen Hobbys zählen $hobbys."

    Wäre es nur dieser eine Satz, oder wären es Sätze, die eine Konstante Anzahl variabler Inhalte haben, könnte man das vermutlich mit einer einfachen Funktion lösen, z.B. so o. s.ä.:

    function MachSatz($txtVar, $alter, $geschlecht, $wohnart, $hobbys) {
    global $VTXT;
    $derSatz=$VTXT[$txtVar];
    return $derSatz;
    }

    Ich weiß jetzt nicht, ob die Variablen in dem Text in diesem Fall noch durch Werte ersetzt werden, oder ob man sie zuerst escapen müsste. Notfalls könnte man sie ja auch anders innerhalb des Satzes nennen, z.B. [alter], [geschlecht] usw. und sie dann mit einem RegEx durch die an die Funktion übergebenen Variablenwerte ersetzen. Aber das spielt jetzt mal keine Rolle.

    Das Problem an sich ist, dass es zig verschiedene Sätze sein können. Der eine Satz kann 3 variable Inhalte haben, der andere 10, ein ganz anderer wiederum gar keine.

    Somit kommt eine Funktion nicht infrage. Wie kann ich das also sinnvoll lösen?

    Wäre schön, wenn es nur an meiner nächtlichen Umnebelung liegt, dass mir keine Lösung einfällt

    ADco

  • #2
    Versuche es mal mit "eval();".
    [COLOR=#9C5245]Internet-Explorer[/COLOR] [COLOR=#334D7B]User und stolz drauf! :P[/COLOR]

    Kommentar


    • #3
      eval is evil, und auch hier mal wieder vollkommen unnötig.

      http://www.php.net/manual/de/function.sprintf.php, beispiel 2 und 3 ansehen.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        eval is evil
        Warum? Die Zeichenkette kommt doch von einer Sicherenquelle.

        Aber "sprintf();" ist natürlich sauberer.
        [COLOR=#9C5245]Internet-Explorer[/COLOR] [COLOR=#334D7B]User und stolz drauf! :P[/COLOR]

        Kommentar


        • #5
          Original geschrieben von eRoZion
          Warum? Die Zeichenkette kommt doch von einer Sicherenquelle.
          ja, in dem fall mag die wahrscheinlichkeit, mit eval was "kaputt zu machen", zugegebenermaßen sehr gering sein.

          aber trotzdem ist es hier vollkommen unnötig, und es gibt eine bessere lösung.
          es mag situationen geben, wo eval hilfreich und vielleicht sogar notwendig ist - aber dann würde ich im allgemeinen zu behaupten wagen, dass das konzept an sich nicht besonders durchdacht ist, wenn es ohne eval nicht umzusetzen ist.
          eval ist m.E. nur ein schlechtes hilfskonstrukt, das man wo immer es geht durch bessere alternativen ersetzen sollte.
          ausserdem ist es meist nicht sonderlich performant.

          ist ähnlich wie mit dem goto, das hat heutzutage in strukturierter programmierung ja auch nichts mehr zu suchen.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Ach, so einfach geht das. Tatsache Habe die (s)printf-Funktion genommen und bin zu 100% zufrieden.

            Vielen Dank.

            Kommentar

            Lädt...
            X