mitmario.dev

Konstanten

PHP Sandbox 3 Min Lesezeit 4 BeispieleLektion 6 von 7

Manche Werte in einem Programm ändern sich nie. Der Steuersatz, der Name der Firma, der Ordner, in dem die Bilder liegen. Man könnte sie in eine Variable legen und sich vornehmen, sie nicht mehr anzufassen. PHP hat für diesen Fall etwas Besseres.

const legt einen Wert ein für alle Mal fest

Eine Konstante schreibst du mit const, in Großbuchstaben und ohne Dollarzeichen.

Ein Wert, der sich nicht ändert
<?php

const FIRMA = "Bergblick GmbH";
const MWST = 0.19;

$netto = 100;
$brutto = $netto + $netto * MWST;

echo FIRMA, "\n";
echo "Steuersatz: ", MWST * 100, " %\n";
echo "Brutto: ", $brutto, " Euro\n";

Die Großbuchstaben sind eine Verabredung und kein Zwang, aber halte dich daran: Sie sind das, woran man im Code sofort erkennt, dass sich hier nichts mehr ändert. Umlaute lässt du im Namen weg, so wie bei Variablen.

Rechnen kannst du mit einer Konstanten wie mit allem anderen, MWST * 100 funktioniert genauso wie mit einer Variablen. Was nicht funktioniert, ist das Überschreiben. Eine Zeile MWST = 0.07; ist ein Parse-Fehler, die Datei startet damit gar nicht erst, du kennst das aus Lektion 1.4. Genau darum geht es: Die Zusage steht im Code und nicht in deinem Gedächtnis.

Dir ist vielleicht das Komma hinter echo aufgefallen. Das ist neu, und es hat mit der nächsten Überschrift zu tun.

Warum eine Konstante ein Komma braucht

Bisher hast du Werte in eine Zeichenkette hineingeschrieben: "Hallo $name". Bei einer Konstanten geht das nicht.

Eine Konstante steht nicht in einer Zeichenkette
<?php

const STADT = "Köln";
$stadt = "Köln";

echo "Variable in der Zeichenkette:  $stadt\n";
echo "Konstante in der Zeichenkette: STADT\n";
echo "Konstante daneben:             ", STADT, "\n";

Die zweite Zeile gibt wörtlich STADT aus. Kein Fehler, keine Warnung, nur der falsche Text mitten in deiner Ausgabe. Der Grund ist genau das fehlende Dollarzeichen: PHP sucht in einer Zeichenkette nach Variablen, und STADT ist keine, also ist es gewöhnlicher Text.

Das ist einer der stillsten Fehler in PHP, und du wirst ihn irgendwann machen. Die Lösung siehst du in der dritten Zeile: Die Konstante steht neben der Zeichenkette, getrennt durch ein Komma. echo nimmt beliebig viele Werte, durch Kommas getrennt, und schreibt sie einen nach dem anderen hinaus. Für Konstanten ist das der übliche Weg. In Lektion 3.2 lernst du noch eine zweite Möglichkeit, Teile zusammenzusetzen.

const oder define

Es gibt einen zweiten Weg, eine Konstante anzulegen: die Funktion define().

Ein zweites define ändert nichts
<?php

define("PFAD", "/var/www");

echo PFAD, "\n";

define("PFAD", "/tmp");

echo PFAD, "\n";
echo "fertig\n";

Der Unterschied ist unauffälliger, als er klingt. const wird festgelegt, während PHP deine Datei liest, und darf deshalb nur ganz oben stehen, außerhalb von allem. define() läuft mit wie eine normale Anweisung, kann also einen Wert bekommen, der vorher erst ausgerechnet wurde, und darf später auch in einer Bedingung stehen.

Nimm im Kurs const, außer du brauchst wirklich define(). Es liest sich besser, und ein Schreibfehler fällt früher auf.

Interessant ist, was passiert, wenn du eine Konstante ein zweites Mal festlegst. Die Ausgabe zeigt zweimal /var/www: Der neue Wert wird nicht übernommen. Auf dem Fehlerkanal steht eine Warnung dazu, und der Zusatz darin ist bemerkenswert, denn er sagt, dass daraus in PHP 9 ein echter Fehler wird. Das Programm läuft trotzdem bis fertig durch, wie du es von Warnungen kennst.

Was PHP schon mitbringt

Ein paar Konstanten gibt es, ohne dass du etwas tun musst.

Die Konstanten, die PHP mitbringt
<?php

echo "Version:      ", PHP_VERSION, "\n";
echo "Größte Zahl:  ", PHP_INT_MAX, "\n";
echo "Zeile eins", PHP_EOL, "Zeile zwei", PHP_EOL;

PHP_VERSION sagt, welche Fassung hier läuft, PHP_INT_MAX nennt die größte ganze Zahl, die noch exakt hineinpasst. Die brauchst du selten, aber wenn eine Rechnung plötzlich Unsinn liefert, ist der Blick dorthin schnell getan.

PHP_EOL ist der Zeilenumbruch des Systems, auf dem dein Code gerade läuft. Auf Linux, also auch hier, ist das genau dasselbe wie "\n". Der Sinn zeigt sich erst, wenn du eine Datei schreibst, die jemand unter Windows öffnet, denn dort ist ein Zeilenumbruch etwas anderes. Für Text, der im Browser landet, bringt es nichts, dort zählt HTML.

Womit du übrigens die Bausteine zusammen hast: Werte, Namen dafür, die Sorten, die es gibt, und Namen, die sich nicht mehr ändern. Ab dem nächsten Abschnitt fängst du an, damit wirklich zu arbeiten.

Zum Mitnehmen

Eine Konstante hat kein Dollarzeichen. Das ist keine Schreibregel, sondern der Grund, warum sie sich anders verhält als eine Variable, und zwar genau dort, wo man es nicht erwartet.

Jetzt du

Basis Konto, kostenlos

Zu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.

Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.

In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.

Was in dieser Lektion steckt

  • Artikel mit 4 Beispielen zum Ausprobieren

    Steht hier, ohne Konto lesbar.

  • Aufgabe, dein Code läuft auf einem Server

    Öffnet sich mit dem Basis Konto.