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 11
Namen: 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)<?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" => wahr
Null-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 unbekannt
Strikte 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 given
Setze 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
Aufgabe
Gib für fünf verschiedene Werte Typ und Wahrheitswert aus. Probiere 0 == "a" und 0 === "a".