Start · Sprachen · PHP · Referenz · EnchantDictionary

EnchantDictionary

Klasse

Repräsentiert ein einzelnes Wörterbuch zur Rechtschreibprüfung innerhalb der Enchant-Erweiterung.

seit PHP 8.0.0 Kategorie: string

Signatur

class EnchantDictionary

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);
?>
'Rechtshreibung' ist falsch geschrieben. Vorschläge: Rechtschreibung, Rechtschreibungen

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);
?>
Vor dem Hinzufügen: 'PHP-Entwickler' ist unbekannt. Nach dem Hinzufügen: 'PHP-Entwickler' ist korrekt.

// 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.