Start · Sprachen · PHP · Referenz · EnchantBroker

EnchantBroker

Klasse

Verwaltet verfügbare Rechtschreibprüfungs-Provider und erzeugt <code>EnchantDictionary</code>-Objekte für die Arbeit mit Wörterbüchern.

seit PHP 8.0.0 Kategorie: string

Signatur

class EnchantBroker

Beschreibung

EnchantBroker ist die zentrale Einstiegsklasse der Enchant-Erweiterung in PHP. Sie wurde mit PHP 8.0 als objektorientierte Alternative zu den prozeduralen enchant_broker_*-Funktionen eingeführt und kapselt einen Enchant-Broker-Handle, der den Zugriff auf verschiedene Rechtschreibprüfungs-Backends (z. B. Hunspell, Aspell, Nuspell) abstrahiert.

Über eine Instanz dieser Klasse kann ermittelt werden, welche Rechtschreibprüfungs-Provider auf dem System verfügbar sind, und es können EnchantDictionary-Objekte für bestimmte Sprachen angefordert werden. Der Broker fungiert dabei als Factory und Ressourcen-Manager für alle Dictionary-Objekte.

Typische Anwendungsfälle sind Web-Formulare mit serverseitiger Rechtschreibprüfung, Content-Management-Systeme oder Texteditoren, die Tippfehler erkennen und Korrekturvorschläge anbieten sollen. Die Klasse kann nicht manuell instanziiert werden – Instanzen werden stattdessen über enchant_broker_init() erzeugt oder sind das Ergebnis der automatischen Ressourcen-Konvertierung durch PHP 8.

  • Listet installierte Rechtschreibprüfungs-Backends mit listProviders()
  • Prüft die Verfügbarkeit einer Sprache mit dictExists()
  • Öffnet ein Wörterbuch mit requestDict() oder requestPwlDict() für persönliche Wortlisten

Beispiele

Verfügbare Provider auflisten und Deutsch-Wörterbuch öffnen

<?php
// Broker initialisieren (PHP 8+ gibt ein EnchantBroker-Objekt zurück)
$broker = enchant_broker_init();

if (!$broker instanceof EnchantBroker) {
    die('Enchant-Erweiterung nicht verfügbar.');
}

// Alle verfügbaren Rechtschreibprüfungs-Provider anzeigen
$providers = enchant_broker_list_providers($broker);
foreach ($providers as $provider) {
    echo 'Provider: ' . $provider['name'] . ' – ' . $provider['desc'] . PHP_EOL;
}

// Prüfen, ob Deutsch verfügbar ist
if (enchant_broker_dict_exists($broker, 'de_DE')) {
    $dict = enchant_broker_request_dict($broker, 'de_DE');

    $wort = 'Rechtschreibprüfung';
    if (enchant_dict_check($dict, $wort)) {
        echo "'$wort' ist korrekt geschrieben." . PHP_EOL;
    } else {
        $vorschlaege = enchant_dict_suggest($dict, $wort);
        echo "Vorschläge: " . implode(', ', $vorschlaege) . PHP_EOL;
    }

    enchant_broker_free_dict($dict);
}

enchant_broker_free($broker);
Provider: Hunspell – Hunspell Provider 'Rechtschreibprüfung' ist korrekt geschrieben.

Persönliches Wörterbuch (PWL) verwenden

<?php
$broker = enchant_broker_init();

// Persönliche Wortliste (Plain Word List) laden oder neu anlegen
$pwlPfad = '/tmp/mein_woerterbuch.pwl';
$dict = enchant_broker_request_pwl_dict($broker, $pwlPfad);

if ($dict instanceof EnchantDictionary) {
    // Eigenes Wort zur persönlichen Liste hinzufügen
    enchant_dict_add($dict, 'PHP-Entwickler');

    $testWort = 'PHP-Entwickler';
    if (enchant_dict_check($dict, $testWort)) {
        echo "'$testWort' ist in der persönlichen Wortliste enthalten." . PHP_EOL;
    }

    enchant_broker_free_dict($dict);
}

enchant_broker_free($broker);
'PHP-Entwickler' ist in der persönlichen Wortliste enthalten.

// Wichtig · Fallstricke

Verfügbarkeit: Die EnchantBroker-Klasse und das zugehörige EnchantDictionary wurden in PHP 8.0 als objektorientierte Schnittstelle eingeführt. In PHP 7 lieferten die enchant_broker_*-Funktionen noch einfache Ressourcen-Handles zurück. Bestehende prozedurale Funktionen akzeptieren in PHP 8 sowohl die alten Ressourcen als auch die neuen Objekte.

Abhängigkeit: Die Enchant-Erweiterung muss beim Kompilieren von PHP eingebunden sein (--with-enchant) und die zugehörige Systembibliothek (libenchant) sowie mindestens ein Backend (z. B. Hunspell mit entsprechenden .dic/.aff-Sprachdateien) müssen installiert sein.

Ressourcenverwaltung: Geöffnete Wörterbücher sollten explizit mit enchant_broker_free_dict() freigegeben werden, bevor der Broker mit enchant_broker_free() geschlossen wird, um Speicherlecks zu vermeiden.