Dein erstes PHP-Programm
PHP-Dateien aufbauen, CLI vs. Web, die wichtigsten Ausgabe-Konstrukte und wie du modernes PHP mit strict_types schreibst.
Inhaltsverzeichnis
Dein erstes PHP-Programm
Schauen wir uns ein PHP-Programm genau an - auf der Kommandozeile und als Webseite.
Die minimale PHP-Datei
<?php
declare(strict_types=1);
echo "Hallo, PHP!\n";
<?php
Jede PHP-Datei beginnt mit <?php. Alles davor (oder ausserhalb) ist normales HTML. Das schliessende Tag ?> wirst du in reinen PHP-Dateien weglassen - das verhindert versehentliche Leerzeichen am Dateiende.
declare(strict_types=1);
Aktiviert strikte Typpruefung fuer die Datei. Das solltest du in jeder modernen PHP-Datei als Erstes haben:
function addieren(int $a, int $b): int { return $a + $b; }
addieren(1, '2'); // Ohne strict_types: konvertiert '2' zu 2 und liefert 3
// Mit strict_types: TypeError
echo
Gibt einen Wert auf der Ausgabe aus. Kein Zeilenumbruch - den haengst du mit \n an.
PHP auf der Kommandozeile
php hallo.php
Das funktioniert wie Python / Node - PHP laeuft einfach das Script.
PHP im Web
Wenn du php -S localhost:8000 laufen laesst und eine index.php hast, kannst du PHP auch im Browser aufrufen. PHP mischt nahtlos HTML und Code:
<?php
$name = 'Anna';
$aktiv = true;
?>
<!doctype html>
<html lang="de">
<head><title>Hallo</title></head>
<body>
<h1>Hallo, <?= $name ?>!</h1>
<?php if ($aktiv): ?>
<p class="status">Account ist aktiv.</p>
<?php else: ?>
<p class="status">Account ist inaktiv.</p>
<?php endif; ?>
</body>
</html>
Verkuerzte Syntax
<?= $wert ?>ist die Kurzform fuer<?php echo $wert; ?>- Fuer Templating nutzt man oft die alternative Syntax:
if (...):,endif;,foreach (...):,endforeach; - In Frameworks wie Laravel gibt es eigene Template-Sprachen (Blade), aber โrohes PHPโ reicht fuer kleine Seiten
Einfache Variablen
<?php
declare(strict_types=1);
$name = 'Anna';
$alter = 28;
$aktiv = true;
$pi = 3.14;
echo "Name: {$name}\n";
echo "Alter: {$alter}\n";
echo "Aktiv: " . ($aktiv ? 'ja' : 'nein') . "\n";
echo "Pi: {$pi}\n";
$variable- Variablen beginnen mit einem Dollar-Zeichen- Strings in doppelten Anfuehrungszeichen erlauben Variable Interpolation:
"Hallo, {$name}!" - Strings in einfachen Anfuehrungszeichen sind โwortwoertlichโ:
'Hallo, {$name}!'wird nicht interpretiert
Nutzereingabe
CLI
<?php
echo "Wie heisst du? ";
$name = trim(fgets(STDIN));
echo "Hallo, {$name}!\n";
Web (aus einem Formular)
<form method="POST">
<input name="nickname">
<button>Absenden</button>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = trim($_POST['nickname'] ?? '');
echo "Hallo, " . htmlspecialchars($name);
}
Wichtig: Nutzer-Input immer mit htmlspecialchars escapen, bevor du ihn ausgibst - sonst riskierst du XSS.
Einfache Funktionen
<?php
declare(strict_types=1);
function addieren(int $a, int $b): int
{
return $a + $b;
}
function gruessen(string $name = 'Welt'): string
{
return "Hallo, {$name}!";
}
echo addieren(3, 4) . "\n"; // 7
echo gruessen() . "\n"; // Hallo, Welt!
echo gruessen('Anna') . "\n"; // Hallo, Anna!
Ein kleines Beispielprogramm
<?php
declare(strict_types=1);
$namen = ['Max', 'Anna', 'Leo'];
foreach ($namen as $name) {
if (strlen($name) > 3) {
echo "Hallo, {$name}!\n";
}
}
// Funktionaler Stil
$lang = array_filter($namen, fn(string $n) => strlen($n) > 3);
$oben = array_map('strtoupper', $lang);
echo implode(', ', $oben) . "\n";
Was ist neu?
foreach ($array as $item)fuer einfache Iterationarray_filtermit einer Arrow Functionfn() => ...array_map('strtoupper', ...)uebergibt den Funktionsnamen als Stringimplode(', ', $array)verbindet Array-Elemente zu einem String
Fehler und var_dump
Ein wichtiges Debug-Werkzeug:
<?php
$person = ['name' => 'Anna', 'alter' => 28];
var_dump($person);
/* gibt aus:
array(2) {
["name"]=> string(4) "Anna"
["alter"]=> int(28)
}
*/
print_r ist eine lesbarere Variante:
print_r($person);
/* gibt aus:
Array
(
[name] => Anna
[alter] => 28
)
*/
Kommentare
<?php
// Einzeilig
# Auch einzeilig (unueblich)
/*
Mehrzeilig
*/
/**
* PHPDoc - wichtig fuer IDE-Support und Dokumentation
*
* @param string $name Der Name
* @return string Der Gruss
*/
function gruessen(string $name): string { /* ... */ }
PHPDoc-Kommentare werden von IDEs genutzt, um dir Typ-Informationen anzuzeigen.
Zusammenfassung
<?phpam Dateianfang,declare(strict_types=1);als zweite Zeileechound<?= ?>fuer Ausgabe- PHP mischt HTML und Code - perfekt fuer kleine Seiten
- Variablen beginnen mit
$, Interpolation nur in"..."-Strings foreach,array_filter,array_mapsind der PHP-Alltag- Nutzer-Input immer mit
htmlspecialcharsescapen!
Im naechsten Kapitel: Variablen und Datentypen im Detail.