EMZETT.
Login

Kurz: Namespaces verhindern Namenskonflikte und spiegeln die Ordnerstruktur wider:

Teil des Kurses PHP

Kapitel 13 von 15 im Kurs PHP (Abschnitt „Werkzeuge“). Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Namespaces

Namespaces verhindern Namenskonflikte und spiegeln die Ordnerstruktur wider:

<?php
namespace Shop\Modell {
    class Produkt
    {
        public function __construct(public string $name) {}
    }
    function hilfe(): string { return __FUNCTION__; }
    const VERSION = "1.0";
}
 
namespace {
    use Shop\Modell\Produkt;
    use Shop\Modell\Produkt as P;
    use function Shop\Modell\hilfe;
    use const Shop\Modell\VERSION;
 
    $p = new Produkt("Stift");
    echo $p::class, " ", (new P("Heft"))->name, " ", hilfe(), " ", VERSION, " ", \strlen("abc"), "\n";
}

Ausgabe:

Shop\Modell\Produkt Heft Shop\Modell\hilfe 1.0 3

Composer

Composer ist der Paketmanager von PHP (packagist.org). Er installiert Bibliotheken und stellt einen Autoloader bereit:

composer init                      # composer.json anlegen
composer require monolog/monolog   # Paket hinzufügen
composer install                   # alles gemäß composer.lock installieren
composer update                    # neuere Versionen holen
composer dump-autoload             # Autoloader neu erzeugen

Die Datei composer.json:

{
  "name": "meine/app",
  "require": { "php": ">=8.2", "monolog/monolog": "^3.0" },
  "require-dev": { "phpunit/phpunit": "^11.0" },
  "autoload": { "psr-4": { "App\\": "src/" } }
}

PSR-4 bedeutet: Die Klasse App\Dienst\Mailer liegt in src/Dienst/Mailer.php. In deinem Einstiegsskript lädst du alles mit:

index.php

<?php
require __DIR__ . "/vendor/autoload.php";
 
use App\Dienst\Mailer;
 
(new Mailer())->sende("mia@example.com");

Wichtige Standards der PHP-FIG: PSR-1/12 (Code-Stil), PSR-4 (Autoloading), PSR-7 (HTTP-Nachrichten), PSR-3 (Logger), PSR-11 (Container).

Beliebte Pakete und Frameworks

ZweckPaket
FrameworkLaravel, Symfony, Slim
TemplatesTwig, Blade
Datenbank-ORMEloquent, Doctrine
HTTP-ClientGuzzle, Symfony HttpClient
LoggingMonolog
TestsPHPUnit, Pest
Statische AnalysePHPStan, Psalm
Code-StilPHP-CS-Fixer, PHP_CodeSniffer

Tests mit PHPUnit

tests/RechnerTest.php

<?php
use PHPUnit\Framework\TestCase;
use App\Rechner;
 
final class RechnerTest extends TestCase
{
    public function testAddition(): void
    {
        $this->assertSame(5, (new Rechner())->addiere(2, 3));
    }
 
    /** @dataProvider paare */
    public function testQuadrat(int $in, int $erwartet): void
    {
        $this->assertSame($erwartet, (new Rechner())->quadrat($in));
    }
 
    public static function paare(): array
    {
        return [[2, 4], [3, 9], [-4, 16]];
    }
 
    public function testFehler(): void
    {
        $this->expectException(\DivisionByZeroError::class);
        (new Rechner())->teile(1, 0);
    }
}

Starten: vendor/bin/phpunit. Du brauchst nicht zwingend ein Framework, um Tests zu schreiben: Ein selbstgebauter Mini-Testlauf zeigt das Prinzip:

<?php
function pruefe(string $name, callable $test): void
{
    try {
        $test();
        echo "OK   $name\n";
    } catch (Throwable $e) {
        echo "FAIL $name: ", $e->getMessage(), "\n";
    }
}
function gleich($erwartet, $ist): void
{
    if ($erwartet !== $ist) throw new Exception("erwartet " . var_export($erwartet, true) . ", erhalten " . var_export($ist, true));
}
 
pruefe("addition", fn() => gleich(5, 2 + 3));
pruefe("strings", fn() => gleich("ABC", strtoupper("abc")));
pruefe("absichtlich falsch", fn() => gleich(4, 2 + 3));

Ausgabe:

OK   addition
OK   strings
FAIL absichtlich falsch: erwartet 4, erhalten 5

Werkzeuge für Qualität

vendor/bin/phpstan analyse src --level=8    # findet Typfehler ohne Ausführung
vendor/bin/php-cs-fixer fix                 # formatiert nach PSR-12
php -l datei.php                            # Syntax prüfen

Merke

  • Namespaces ordnen Klassen; use importiert
  • Composer verwaltet Pakete und bietet den PSR-4-Autoloader (vendor/autoload.php)
  • Wichtige Standards: PSR-4, PSR-12
  • PHPUnit/Pest für Tests, PHPStan/Psalm für statische Analyse
  • Frameworks: Laravel, Symfony

Übungsaufgabe

Lege mit composer init ein Projekt mit PSR-4-Autoloading an, schreibe eine Klasse in src/ und rufe sie auf.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Web: Formulare, Sessions und Sicherheit

Weiter: Modernes PHP (8.x)

Alle Kapitel: PHP im Überblick