Signatur
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()oderrequestPwlDict()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);
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);
// 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.