PHP Variablen und ihre Verwendung
Sie befinden sich:
Home >
Php >
PHP Variablen und ihre Verwendung
PHP Variablen sind der Zwischenspeicher für alles, was sich im Lauf eines Skripts ändern kann: ein Name aus dem Formular, eine Zahl aus der Datenbank, eine Liste mit Einträgen. Wer Variablen wirklich versteht, hat ein gutes Drittel der Sprache schon im Griff. Auf dieser Seite gehen wir die Spielregeln durch, die Sie für den Alltag brauchen, schauen uns die Datentypen an, sehen wo eine Variable gültig ist und welche modernen Werkzeuge PHP Ihnen heute an die Hand gibt. Bevor es um Datentypen und Gültigkeitsbereiche geht, lohnt ein Blick auf die Schreibweise. Wie PHP Variablen aufgebaut sindJede Variable beginnt in PHP mit einem Dollarzeichen. Danach folgt ein Buchstabe oder ein Unterstrich, daran dürfen sich beliebig viele Buchstaben, Ziffern und Unterstriche anschließen. Eine Ziffer am Anfang funktioniert nicht und Groß- und Kleinschreibung wird unterschieden, also $name und $Name sind zwei verschiedene Variablen. <?php
declare(strict_types=1);
$vorname = 'Tim';
$Vorname = 'Hans';
echo $vorname . ' ' . $Vorname; /* Ausgabe: Tim Hans */
/* $4you = 23; -> Fehler: darf nicht mit Ziffer beginnen */
$_4you = 23; /* funktioniert */
$huschen = 23; /* funktioniert */
PHP gehört zu den dynamisch typisierten Sprachen. Eine Variable kann zuerst eine Zahl enthalten, dann eine Zeichenkette, dann ein Array. Das ist bequem, kann aber auch zu schwer auffindbaren Fehlern führen. Mit declare(strict_types=1) am Dateianfang und Type Hints in Funktionen können Sie sich aber auch in PHP einen sehr genauen Typ-Vertrag bauen. Die Datentypen im ÜberblickPHP kennt eine Handvoll grundlegender Datentypen. Für den Alltag müssen Sie nur die ersten fünf wirklich kennen, alles andere kommt im Lauf der Zeit. graph TD
A[PHP-Datentypen] --> B[Skalar]
A --> C[Zusammengesetzt]
A --> D[Sonderfall]
B --> B1[bool]
B --> B2[int]
B --> B3[float]
B --> B4[string]
C --> C1[array]
C --> C2[object]
D --> D1[null]
D --> D2[resource]
- bool trifft eine Wahr-oder-Falsch-Aussage. Werte:
true oder false. - int ist eine Ganzzahl mit Vorzeichen, etwa
42 oder -7. - float ist eine Gleitkommazahl, also
3.14 oder -0.5. - string ist eine Zeichenkette, etwa
'PHP-Space'. - array ist eine geordnete Sammlung von Werten. Auf Arrays haben wir eine eigene Seite.
- object ist eine Instanz einer Klasse, das Thema deckt unser Tutorial zu abstrakten Klassen ab.
- null ist der spezielle „hat noch keinen Wert“-Zustand.
- resource ist eine Referenz auf etwas Externes wie eine Datei. Seit PHP 8 verschwindet dieser Typ nach und nach, weil viele Funktionen inzwischen eigene Klassen wie
GdImage oder OpenSSLAsymmetricKey liefern.
Typumwandlung in der PraxisManchmal möchten Sie den Typ eines Werts ausdrücklich umwandeln. PHP nennt das „Casting“ und lässt sich mit einer Klammer vor dem Wert erledigen. Mit var_dump() sehen Sie, was tatsächlich rauskommt. <?php
$alsString = '42';
$alsInt = (int) $alsString; /* 42 */
$alsFloat = (float) '3.14abc'; /* 3.14, der Rest wird abgeschnitten */
$alsBool = (bool) $alsString; /* true, da nicht leer */
$alsArray = (array) 'wort'; /* ['wort'] */
var_dump($alsString); /* string(2) "42" */
var_dump($alsInt); /* int(42) */
var_dump($alsFloat); /* float(3.14) */
var_dump($alsBool); /* bool(true) */
var_dump($alsArray); /* array(1) { [0]=> string(4) "wort" } */
Für ein noch saubereres Casting bei Strings hilft intval(), das eine Basis (zehn, sechzehn) berücksichtigt. Mathematische Operationen mit VariablenVariablen sind natürlich nicht nur zum Speichern da, sondern auch zum Rechnen. PHP unterstützt alle gewohnten Operatoren plus die kompakten Kurzformen. <?php
$a = 10;
$b = 11;
$a = $a * $b; /* 110 */
echo $a, PHP_EOL;
$a++; /* 111 */
echo $a, PHP_EOL;
$a--; /* 110 */
echo $a, PHP_EOL;
/* Kurzformen */
$a += 5; /* identisch zu $a = $a + 5 */
$a -= 2; /* identisch zu $a = $a - 2 */
$a *= 2; /* identisch zu $a = $a * 2 */
$a /= 4; /* identisch zu $a = $a / 4 */
$a **= 2; /* Potenz, seit PHP 5.6 */
Beim Mischen von Strings und Zahlen ist Vorsicht geboten: Mit declare(strict_types=1) und Type Hints in Funktionen vermeiden Sie, dass aus einer Zeichenkette stillschweigend eine Zahl wird und ein Bug erst Wochen später auffällt. Den Typ von PHP Variablen prüfenWenn Sie nicht sicher sind, was in einer Variable steckt, fragen Sie PHP einfach. Es gibt eine ganze Familie von is_*-Funktionen, jede prüft auf einen bestimmten Typ und gibt true oder false zurück. Was Sie nicht mehr verwenden solltenDrei alte Aliasse hängen aus historischen Gründen noch in der Sprache, sind aber als deprecated markiert oder bereits entfernt. Halten Sie sich von ihnen fern und nutzen Sie die Hauptnamen: is_double(): Alias von is_float(). Verwenden Sie is_float().is_real(): Alias von is_float(), mit PHP 8.0 entfernt.is_long(): Alias von is_int(). Verwenden Sie is_int().is_integer(): Alias von is_int(). Funktioniert noch, aber bleiben Sie bei is_int().
Gültigkeitsbereiche von PHP VariablenWo eine Variable lebt, hängt davon ab, wo Sie sie definieren. PHP unterscheidet vier wichtige Bereiche: graph TD
A[Skript-Scope] --> B[Funktions-Scope]
A --> C[Klassen-Scope]
B --> D[Static-Variable]
A --> E[Superglobals]
E --> F[$_GET]
E --> G[$_POST]
E --> H[$_SESSION]
E --> I[$GLOBALS]
- Lokale Variablen leben nur innerhalb der Funktion oder Methode, in der sie definiert wurden.
- Globale Variablen sind im Hauptskript verfügbar, aber nicht automatisch in Funktionen sichtbar.
- Statische Variablen behalten ihren Wert über mehrere Funktionsaufrufe hinweg.
- Superglobals wie
$_GET, $_POST oder $GLOBALS sind überall sichtbar, brauchen kein global-Schlüsselwort.
<?php
declare(strict_types=1);
$global_var = 'Ich bin global';
function test(): void
{
$local_var = 'Ich bin lokal';
/* Globale Variable bekannt machen */
global $global_var;
echo $global_var, PHP_EOL;
echo $local_var, PHP_EOL;
/* Statische Variable: bleibt bei jedem Aufruf erhalten */
static $count = 0;
$count++;
echo "Aufruf Nummer: $count", PHP_EOL;
}
test();
test();
/* echo $local_var; -> Fehler: $local_var existiert hier nicht */
/* Alternativer Zugriff auf Globals */
echo $GLOBALS['global_var'];
Im modernen Code wird das global-Schlüsselwort meist vermieden. Gebraucht wird es eigentlich nur in Legacy-Projekten. In neuem Code übergibt man Werte als Funktionsparameter oder kapselt sie in Klassen. Mehrere Werte: das ArraySobald mehr als ein Wert zusammengehört, kommt das Array ins Spiel. PHP-Arrays sind ein Schweizer Taschenmesser, weil sie sowohl numerisch als auch assoziativ funktionieren. Auf unserer Array-Seite finden Sie alle Details. <?php
declare(strict_types=1);
/* Modern, kurze Schreibweise (seit PHP 5.4) */
$fruechte = [
'fruechte' => ['a' => 'orange', 'b' => 'banane', 'c' => 'apfel'],
'nummern' => [1, 2, 3, 4, 5, 6],
'var' => ['erstes', 5 => 'zweites', 'drittes'],
];
echo $fruechte['fruechte']['b']; /* banane */
echo $fruechte['nummern'][0]; /* 1, da Index bei 0 startet */
echo $fruechte['var'][6]; /* drittes */
Wichtig zu wissen: Numerische Indizes starten in PHP standardmäßig bei 0. Ein Array mit zehn Einträgen geht also von Index 0 bis 9. Wer das vergisst, sucht im Bug-Hunting oft lange nach dem Off-by-one-Fehler. Modern arbeiten: Type DeclarationsPHP ist seit Version 7 schrittweise typsicherer geworden. Wer heute neuen Code schreibt, sollte das nutzen. Mit Type Hints bei Parametern und Rückgabewerten und Typed Properties in Klassen verschiebt sich ein großer Teil möglicher Bugs vom Laufzeit-Verhalten in die statische Analyse. <?php
declare(strict_types=1);
class Benutzer
{
public function __construct(
public readonly string $name,
public readonly int $alter,
public readonly ?string $email = null,
) {
}
public function istVolljaehrig(): bool
{
return $this->alter >= 18;
}
}
$u = new Benutzer(name: 'Mira', alter: 19, email: 'mira@example.com');
echo $u->name; /* Mira */
echo $u->istVolljaehrig() ? 'ja' : 'nein';
Vier Dinge passieren hier auf einmal: Constructor Promotion spart Boilerplate, readonly verhindert nachträgliche Änderungen, der Nullable-Parameter ?string erlaubt explizit null, und Named Arguments machen den Aufruf lesbar. Häufige Fragen zu PHP VariablenVier Punkte sorgen beim Einstieg regelmäßig für Stirnrunzeln. 1Wie deklariere ich PHP Variablen richtig?Ein Dollarzeichen, dann ein Buchstabe oder Unterstrich, danach beliebig viele Buchstaben, Ziffern und Unterstriche. Eine Deklaration im Voraus gibt es nicht: Die Variable entsteht in dem Moment, in dem Sie ihr zum ersten Mal einen Wert zuweisen. 2Warum steht vor jeder Variable ein Dollarzeichen?Das Zeichen stammt aus Perl und macht Variablen im Quelltext auf einen Blick erkennbar. Praktisch wird es, wenn PHP mitten in HTML steht: Der Parser erkennt sofort, was eine Variable ist und was bloßer Text. 3Wann sollte ich global besser vermeiden?In neuem Code eigentlich immer. Wer Werte als Parameter übergibt oder in Klassen kapselt, sieht an der Signatur, woher ein Wert kommt. Mit global ist das nur durch Lesen des gesamten Skripts nachvollziehbar. In Legacy-Projekten trifft man es trotzdem noch häufig an. 4Brauche ich Type Hints schon als Anfänger?Sie helfen gerade am Anfang, weil PHP Ihnen den Fehler dann sofort meldet statt drei Funktionen später. declare(strict_types=1) in die erste Zeile und Typen an Parameter und Rückgabewerte schreiben kostet wenig Zeit und erspart lange Fehlersuche. Welche Themen jetzt sinnvoll sindPHP Variablen sind das Fundament. Damit Sie daraus echte Programme bauen, fehlen noch ein paar Bausteine. Diese Reihenfolge bietet sich als Lernpfad an: - Mit
echo und print Inhalte ausgeben. - Mit der
if-Anweisung auf Werte reagieren. - Mit Schleifen wie
for, while und foreach wiederkehrende Aufgaben automatisieren. - Eigene Funktionen schreiben.
- Mit Arrays mehrere Werte verwalten.
- Daten aus Formularen entgegennehmen.
- Sich an PDO und Prepared Statements wagen.
Für Spezialthemen lohnt sich auch ein Blick auf das Tutorial zu dynamischen Variablen oder zu serialize() und unserialize(), wenn Sie Variablen-Inhalte persistent speichern wollen. Jetzt mit der Textausgabe weitermachen oder die Typ-Referenz im PHP-Handbuch nachschlagen.
weiter zum nächsten Kapitel:
PHP echo und print: Text und Variablen ausgeben
|