FoxFozi: Verschachtelte Variablen ?

Hallo,
bin jetzt schon seit einigen Jahren mit PHP unterwegs und habe auch im Laufe dieser Zeit viel dazu gelern.
Scheinbar aber noch nicht genug ^^
An einer simplen Stelle hakt es grade =/

  
$language = 'EN';  
define('DE_LINKBAR1_LINK_GUESTBOOK', 'Gästebuch');  
define('EN_LINKBAR1_LINK_GUESTBOOK', 'Guestbook');

über die Variable $language wird ermittelt, welche Sprache eingestellt ist.
Wie also kann ich jetzt diese beiden Variabeln kombinieren und die Konstante
"EN_LINKBAR1_LINK_GUESTBOOK" ausgeben?

Sowas wie $$language."_LINKBAR1_LINK_GUESTBOOK" wird glaub ich nicht funktionieren.

würde hierbei gerne auf switch- oder if-else-Konstruktionen verzichten.

Wenn alles nicht geht, dann muss ich wohl auf Arrays zurückgreifen; ist aber nicht das, was ich ich mir vorgestellt habe.

Hat jemand eine Idee?
Danke =)

  1. Hi,

    $language = 'EN';

    define('DE_LINKBAR1_LINK_GUESTBOOK', 'Gästebuch');
    define('EN_LINKBAR1_LINK_GUESTBOOK', 'Guestbook');

      
    
    > über die Variable `$language`{:.language-php} wird ermittelt, welche Sprache eingestellt ist.  
      
    das hilft dir aber bei dieser Konstellation wenig.  
      
    
    > Wie also kann ich jetzt diese beiden Variabeln kombinieren und die Konstante "`EN_LINKBAR1_LINK_GUESTBOOK`{:.language-php}" ausgeben?  
      
    Gar nicht. Konstanten sind in PHP nur sehr eingeschränkt brauchbar.  
      
    
    > Sowas wie `$$language."_LINKBAR1_LINK_GUESTBOOK"`{:.language-php} wird glaub ich nicht funktionieren.  
      
    Nein. Selbst wenn man es richtig klammern würde, ergäbe das z.B. den Variablennamen $DE\_LINKBAR1\_LINK\_GUESTBOOK - eine solche Variable gibt es bei dir aber nicht, es ist schließlich eine benannte Konstante.  
      
    
    > Wenn alles nicht geht, dann muss ich wohl auf Arrays zurückgreifen; ist aber nicht das, was ich ich mir vorgestellt habe.  
      
    Warum nicht? Das wäre die sauberste (und IMHO schönste) Lösung:  
      
    ~~~php
    $LINKBAR1_LINK_GUESTBOOK = Array  
     ( 'de'=> 'Gästebuch',  
       'en'=> 'Guestbook'  
     );  
    [...]  
    echo $LINKBAR1_LINK_GUESTBOOK[$language]
    

    Was gefällt dir an diesem Ansatz nicht?
    Ach so, und warum übrigens 'Gästebuch' und nicht 'Gästebuch'? Wenn du nicht gerade US-ASCII als Zeichencodierung verwendest, kannst du Umlaute direkt im Klartext notieren.

    So long,
     Martin

    --
    Vielseitigkeit: Von vielen Dingen keine Ahnung haben.
    1. Nein. Selbst wenn man es richtig klammern würde, ergäbe das z.B. den Variablennamen $DE_LINKBAR1_LINK_GUESTBOOK - eine solche Variable gibt es bei dir aber nicht, es ist schließlich eine benannte Konstante.

      »»
      wie würde das denn aussehen, wenn define('EN_LINKBAR1_LINK_GUESTBOOK', 'Guestbook'); in eine Variable umgebaut wird?

  2. Hi!

    Wie also kann ich jetzt diese beiden Variabeln kombinieren und die Konstante "EN_LINKBAR1_LINK_GUESTBOOK" ausgeben?

    Bitte schau ins PHP-Handbuch, Kapitel Konstanten -> Syntax. Dort ist auch beschrieben, wie man auf Konstanten mit dynamisch erzeugten Namen zugegriffen werden kann.

    Lo!

    1. Hi!

      Wie also kann ich jetzt diese beiden Variabeln kombinieren und die Konstante "EN_LINKBAR1_LINK_GUESTBOOK" ausgeben?

      Bitte schau ins PHP-Handbuch, Kapitel Konstanten -> Syntax. Dort ist auch beschrieben, wie man auf Konstanten mit dynamisch erzeugten Namen zugegriffen werden kann.

      Aus php.net:

      "Ebenso können Sie die Funktion constant() benutzen, um den Wert einer Konstanten auszulesen, wenn Sie den Namen der Konstanten dynamisch erhalten wollen."
      (hier)

      In der Syntax von constant() finde ich aber nichts dergleichen.
      Kannst du mir da weiter helfen?
      Danke.

      1. Hi!

        In der Syntax von constant() finde ich aber nichts dergleichen.
        Kannst du mir da weiter helfen?

        Du findest unter constant() nichts? Ich finde das aber recht gut erklaert dort. Die Beispiele sind auch eingaengig.

        --
        "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
              - T. Pratchett
      2. Hi,

        "Ebenso können Sie die Funktion constant() benutzen, um den Wert einer Konstanten auszulesen, wenn Sie den Namen der Konstanten dynamisch erhalten wollen."
        (hier)

        In der Syntax von constant() finde ich aber nichts dergleichen.

        Was willst du da finden?

        Die Funktion erwartet einen String, der einen Kontantennamen enthält, als Parameter.

        Was ein String ist, weisst du?

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]