Hallo,
ich möchte gerne die Collator-Klasse erweitern und auch create benutzen/überschreiben.
Es werden die richtigen Objekte erzeugt, nur der Type hint für den Return macht Probleme (PHP 7.4).
Setze ich dort einen Typ ?Collator wie in der Basismethode Collator::create ein kommt folgende Warnung
und mit ?CollatorExt
Nun kann ich eine neue Methode createExt definieren welche create nicht überschreibt. Ich muss diese Methode dann aber zwingend nutzen um eine Instanz der Erweiterungsklasse zu bekommen,
denn mit CollatorExt::create('de_DE'); erhalte ich dann nur eine Instanz der Basisklasse.
Lasse ich die create-Methode in CollatorExt weg wird ja auf create der Basisklasse zurückgegriffen. Mit
erhalte ich leider auch nur ein Objekt des Basisklasse.
Gibt eine Lösung für das Problem?
ich möchte gerne die Collator-Klasse erweitern und auch create benutzen/überschreiben.
PHP-Code:
class CollatorExt extends Collator {
public static function create(string $locale)
{
return new self($locale);
}
}
$coll = Collator::create('de_DE'); //object(Collator)
$collExt = CollatorExt::create('de_DE'); //object(CollatorExt)
Code:
Warning: Declaration of CollatorExt::create(string $locale) should be compatible with Collator::create($arg1)
Code:
Declaration of CollatorExt::create(string $locale): ?Collator should be compatible with Collator::create($arg1)
Code:
Warning: Declaration of CollatorExt::create(string $locale): ?CollatorExt should be compatible with Collator::create($arg1)
denn mit CollatorExt::create('de_DE'); erhalte ich dann nur eine Instanz der Basisklasse.
Lasse ich die create-Methode in CollatorExt weg wird ja auf create der Basisklasse zurückgegriffen. Mit
PHP-Code:
$collExt = CollatorExt::create('de_DE'); //object(Collator)
Gibt eine Lösung für das Problem?
Kommentar