EMZETT.
Login

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

Kapitel 2 von 15 im Kurs PHP. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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

TypBeispielHinweis
int42, 0x1F, 0b101, 1_000_00064 Bit auf den meisten Systemen
float3.14, 1.5e3doppelte Genauigkeit
string"Text", 'Text'Bytefolge (UTF-8 mit mb_-Funktionen)
booltrue, false
array[1, 2], ["a" => 1]Liste und Dictionary in einem
nullnullkein 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" => 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, isset prüft Existenz
  • declare(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

Weiter im Kurs

Zurück: Einführung und erstes Skript

Weiter: Operatoren und Strings

Alle Kapitel: PHP im Überblick