Signatur
Beschreibung
EnchantDictionary ist eine opake Klasse, die ab PHP 8.0 als objektorientierter Ersatz für die zuvor verwendeten Ressource-Handles der Enchant-Erweiterung eingeführt wurde. Ein Objekt dieses Typs wird typischerweise durch den Aufruf von enchant_broker_request_dict() oder enchant_broker_request_pwl_dict() erzeugt und repräsentiert ein geladenes Sprachwörterbuch (z. B. Deutsch, Englisch).
Mit einem EnchantDictionary-Objekt lassen sich Wörter auf korrekte Schreibweise prüfen (enchant_dict_check()), Korrekturvorschläge abrufen (enchant_dict_suggest()), benutzerdefinierte Wörter zur Sitzungsliste oder zur persönlichen Wörterbuchdatei hinzufügen (enchant_dict_add(), enchant_dict_add_to_personal()) sowie Wörter vorübergehend als korrekt markieren (enchant_dict_add_to_session()).
Das Objekt kann nicht direkt instanziiert werden – es wird ausschließlich von den Broker-Funktionen der Enchant-Erweiterung zurückgegeben. Die zugrundeliegende Implementierung nutzt Bibliotheken wie Hunspell, Aspell oder Nuspell, je nach Systemkonfiguration.
Vor PHP 8.0 wurden anstelle von EnchantDictionary-Objekten Ressourcen vom Typ enchant dictionary verwendet. Der Funktionsumfang ist identisch, lediglich der Typ hat sich geändert.
Beispiele
Wörter auf korrekte Schreibweise prüfen und Vorschläge anzeigen
<?php
// Enchant-Broker erstellen
$broker = enchant_broker_init();
if (!$broker instanceof EnchantBroker) {
die('Enchant konnte nicht initialisiert werden.');
}
// Prüfen, ob das Deutsche Wörterbuch vorhanden ist
if (enchant_broker_dict_exists($broker, 'de_DE')) {
// EnchantDictionary-Objekt für Deutsch anfordern
$dict = enchant_broker_request_dict($broker, 'de_DE');
$wort = 'Rechtshreibung'; // absichtlicher Tippfehler
if (!enchant_dict_check($dict, $wort)) {
echo "'$wort' ist falsch geschrieben.\n";
$vorschlaege = enchant_dict_suggest($dict, $wort);
echo 'Vorschläge: ' . implode(', ', $vorschlaege) . "\n";
} else {
echo "'$wort' ist korrekt.\n";
}
// Wörterbuch freigeben
enchant_broker_free_dict($dict);
} else {
echo 'Wörterbuch de_DE nicht verfügbar.';
}
// Broker freigeben
enchant_broker_free($broker);
?>
Benutzerdefiniertes Wort zur Sitzung hinzufügen
<?php
$broker = enchant_broker_init();
if (enchant_broker_dict_exists($broker, 'de_DE')) {
/** @var EnchantDictionary $dict */
$dict = enchant_broker_request_dict($broker, 'de_DE');
$eigenerBegriff = 'PHP-Entwickler';
// Vor dem Hinzufügen prüfen
$vorher = enchant_dict_check($dict, $eigenerBegriff) ? 'korrekt' : 'unbekannt';
echo "Vor dem Hinzufügen: '$eigenerBegriff' ist $vorher.\n";
// Zur aktuellen Sitzung hinzufügen (nicht dauerhaft)
enchant_dict_add_to_session($dict, $eigenerBegriff);
// Erneut prüfen
$nachher = enchant_dict_check($dict, $eigenerBegriff) ? 'korrekt' : 'unbekannt';
echo "Nach dem Hinzufügen: '$eigenerBegriff' ist $nachher.\n";
enchant_broker_free_dict($dict);
}
enchant_broker_free($broker);
?>
// Wichtig · Fallstricke
Nicht direkt instanziierbar: new EnchantDictionary() ist nicht möglich. Objekte dieses Typs werden ausschließlich durch enchant_broker_request_dict() oder enchant_broker_request_pwl_dict() erzeugt.
Ressourcen vs. Objekte: Vor PHP 8.0 lieferten Enchant-Funktionen Ressourcen zurück. Code, der is_resource() zur Prüfung nutzt, muss für PHP 8+ auf instanceof EnchantDictionary umgestellt werden.
Verfügbarkeit der Erweiterung: Die Enchant-Erweiterung muss beim PHP-Build eingebunden sein (--with-enchant) und die entsprechenden Systembibliotheken (z. B. libenchant, Hunspell) müssen installiert sein. Die Verfügbarkeit von Wörterbüchern hängt von der Systemkonfiguration ab.
Speicherverwaltung: Nach der Verwendung sollte enchant_broker_free_dict() aufgerufen werden, um Ressourcen freizugeben, bevor der Broker mit enchant_broker_free() beendet wird.