Kurz: a = b = 5; // Mehrfachzuweisung [x, y] = [1, 2]; // Destrukturieren [x, y] = [y, x]; // Tauschen echo “a b x y\n”;
Teil des Kurses PHP
Variablen
<?php
$name = "Mia";
$alter = 17;
$groesse = 1.68;
$aktiv = true;
$nichts = null;
echo gettype($name), " ", gettype($alter), " ", gettype($groesse), " ", gettype($aktiv), " ", gettype($nichts), "\n";
$a = $b = 5; // Mehrfachzuweisung
[$x, $y] = [1, 2]; // Destrukturieren
[$x, $y] = [$y, $x]; // Tauschen
echo "$a $b $x $y\n";
$varname = "dynamisch"; // variable Variablen (selten nötig)
$$varname = "Wert";
echo $dynamisch, "\n";
define("MAX", 10);
const MIN = 1; // Konstanten
echo MAX + MIN, "\n";Ausgabe:
string integer double boolean NULL
5 5 2 1
Wert
11Namen: Buchstaben, Ziffern, _, nicht mit einer Ziffer beginnen. Üblich: $camelCase für Variablen, GROSS_SNAKE für Konstanten.
Die Typen
| Typ | Beispiel | Hinweis |
|---|---|---|
int | 42, 0x1F, 0b101, 1_000_000 | 64 Bit auf den meisten Systemen |
float | 3.14, 1.5e3 | doppelte Genauigkeit |
string | "Text", 'Text' | Bytefolge (UTF-8 mit mb_-Funktionen) |
bool | true, false | |
array | [1, 2], ["a" => 1] | Liste und Dictionary in einem |
null | null | kein Wert |
object, callable, iterable |
<?php
var_dump(PHP_INT_MAX, PHP_INT_MAX + 1, 0.1 + 0.2 == 0.3, abs(0.1 + 0.2 - 0.3) < PHP_FLOAT_EPSILON);
var_dump(intdiv(7, 2), 7 % 3, 7 / 2, 2 ** 10, 10 <=> 5);
var_dump(is_int(5), is_numeric("12.5"), is_numeric("abc"), is_string("x"), is_array([]));Ausgabe:
int(9223372036854775807)
float(9.223372036854776E+18)
bool(false)
bool(true)
int(3)
int(1)
float(3.5)
int(1024)
int(1)
bool(true)
bool(true)
bool(false)
bool(true)
bool(true)Bei Überlauf wird int automatisch zu float.
Typumwandlung
PHP wandelt oft automatisch um (Type Juggling). Mit declare(strict_types=1); wird das bei Funktionsaufrufen strenger. Explizit:
<?php
var_dump((int) "42abc", (int) 3.99, (float) "1.5", (string) 12, (bool) "0", (bool) "", (bool) "false", (array) "x");
var_dump(intval("0x1A", 16), intval("012", 0), floatval("3.14xyz"), boolval([]), strval(true));
var_dump("5" + "3", "5" . "3", "10" == "1e1", 0 == "a", null == false, [] == false);Ausgabe:
int(42)
int(3)
float(1.5)
string(2) "12"
bool(false)
bool(false)
bool(true)
array(1) {
[0]=>
string(1) "x"
}
int(26)
int(10)
float(3.14)
bool(false)
string(1) "1"
int(8)
string(2) "53"
bool(true)
bool(false)
bool(true)
bool(true)Achtung
Der Vergleich
==wandelt Typen um und verblüfft. Nutze===(gleicher Wert und Typ):0 == "a"ist in PHP 8 falsch,"10" == "1e1"aber wahr.
<?php
var_dump(1 === 1.0, 1 == 1.0, "a" === "a", null === false, null ?? "Ersatz");Ausgabe:
bool(false)
bool(true)
bool(true)
bool(false)
string(6) "Ersatz"Wahrheitswerte
Falsch (falsy) sind: false, 0, 0.0, "", "0", [], null. Alles andere ist wahr.
<?php
foreach ([0, 1, "", "0", "a", [], [0], null, 0.0, "false"] as $wert) {
echo json_encode($wert), " => ", $wert ? "wahr" : "falsch", "\n";
}Ausgabe:
0 => falsch
1 => wahr
"" => falsch
"0" => falsch
"a" => wahr
[] => falsch
[0] => wahr
null => falsch
0 => falsch
"false" => wahrNull-Werte prüfen
<?php
$a = null; $b = "da"; $c = 0;
var_dump(isset($a), isset($b), empty($c), is_null($a));
echo $a ?? "Standard", "\n"; // Null-Coalescing
$a ??= "gesetzt"; // zuweisen, wenn null
echo $a, "\n";
$user = ["name" => "Mia"];
echo $user["alter"] ?? "unbekannt", "\n";Ausgabe:
bool(false)
bool(true)
bool(true)
bool(true)
Standard
gesetzt
unbekanntStrikte Typen
<?php
declare(strict_types=1);
function verdopple(int $x): int { return $x * 2; }
echo verdopple(21), "\n";
try {
echo verdopple("21");
} catch (TypeError $e) {
echo "TypeError: ", strstr($e->getMessage(), ", called", true), "\n";
}Ausgabe:
42
TypeError: verdopple(): Argument #1 ($x) must be of type int, string givenSetze declare(strict_types=1); an den Anfang jeder Datei.
Merke
- Typen:
int,float,string,bool,array,null, Objekte gettype,var_dump,is_int… zum Prüfen;(int),(string)… zum Umwandeln- Immer
===statt==vergleichen - Falsy:
false 0 0.0 "" "0" [] null ??und??=für Standardwerte,issetprüft Existenzdeclare(strict_types=1);macht Typen strikt
Übungsaufgabe
Gib für fünf verschiedene Werte Typ und Wahrheitswert aus. Probiere 0 == "a" und 0 === "a".
Quiz zur Selbstkontrolle
Was ist der Unterschied zwischen und =?
- === prüft auch den Typ (richtig)
- === ist langsamer
- Es gibt keinen
- == prüft den Typ
Welcher Wert ist in PHP falsy?
- “0” (richtig)
- “false”
- [0]
- “a”
Was macht $a ??= 5?
- Weist 5 zu, wenn $a null oder nicht gesetzt ist (richtig)
- Vergleicht
- Löscht $a
- Wirft einen Fehler
Weiter im Kurs
Zurück: Einführung und erstes Skript
Weiter: Operatoren und Strings
Alle Kapitel: PHP im Überblick