Antwort an „Rolf B“ verfassen

Hallo Eric,

Link zum Handbuch: String-Interpolation in PHP

Konkreter Fehler: Du verwendest die einfache Syntax (oder basic syntax). Die unterstützt zwar Arrayzugriffe mit String-Keys, aber da diese Syntax uralt ist, basiert sie auf uralter Array-Notation ohne Hochkommas:

Falsch:

... href="/CSSLib/$_SERVER['Lay_e'].css"

Richtig:

... href="/CSSLib/$_SERVER[Lay_e].css"

In den eckigen Klammern darf stehen:

  • Ein Name
  • Eine Variable (also "foo{$arr[$i]}" ist ok)
  • Eine Zahl

Ein Name muss dem Muster [a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]* entsprechen, erlaubt sind im Namen also ASCII-Buchstaben, ASCII-Ziffern (außer am Anfang), ein Unterstrich und die Zeichen mit dem Code 0x80 bis 0xff. Falls Du PHP-Code in UTF-8 speicherst, sollten auch alle Unicode-Zeichen erlaubt sein, weil die in UTF8 als 2 oder mehr Bytes mit Codes von 0x80 bis 0xFF codiert werden.

Alternativ kannst Du auch die erweiterte Interpolationssyntax mit geschweiften Klammern wählen, dann MUSS ein Array-Key in Anführungszeichen stehen:

Auch richtig:

... href="/CSSLib/{$_SERVER['Lay_e']}.css"

Hinweis dazu, warum href="CSSLib/" . $_SERVER['Lay_e'] . ". CSS"> nicht funktioniert: Wenn Du Dich in einem Heredoc-String befindest (also diese <<< Notation), kannst Du nicht eben mal mit dem Punkt-Operator Strings verketten. Der Heredoc-String ist ja nicht beendet, er nimmt den Punkt deshalb als String-Inhalt. Was Du hättest machen können: $_SERVER['Lay_e'] in einer normalen Variablen speichern und diese dann mit normaler String-Interpolation einsetzen.

$language = $_SERVER['Lay_e'];
echo <<<END
<link rel="stylesheet" href="/CSSLib/$language.css">
END;

Die Diskussion darüber, HTML-Code mit ECHO auszugeben, ist mir zwar eigentlich leid, aber ich persönlich finde es ganz schlecht. Moderner Code sieht aus meiner Sicht eher so aus:

function renderPage() {
   $foo = 1;    // Irgendwelche Initialisierungen
   $bar = 2;
?>
<!doctype html>
<html lang="de">
<head>
   <title>Demo</title>
   ...weitere nötige head-Einträge...
   <link rel="stylesheet" href="/CSSLib/<?= $_SERVER['Lay_e'] ?>">
   <link rel="stylesheet" href="/CSSLib/<?= $_SERVER['Hai_o'] ?>">
   <link rel="stylesheet" href="/CSSLib/<?= $_SERVER['Hui_Buh'] ?>">
   ...und so weiter...
</head>
<body>
<?php renderBody() ?>
</body>
</html>
<?php
}   // Ende von render()

Ob man das in Funktionen packt und die Body-Ausgabe in eine weitere Funktion auslagert, ist Geschmackssache und hängt auch von der Komplexität der Seite ab.

Rolf

--
sumpsi - posui - obstruxi
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen