dynamische Parameter in abstrakten Methoden in PHP

8

Wenn ich eine Klasse habe,

%Vor%

Ich bekomme einen Fehler, weil die abstrakte Deklaration keine Parameter hat, aber die Implementierung des Kindes tut es. Ich mache eine Adapter-Elternklasse mit abstrakten Funktionen, die, wenn sie implementiert werden, eine variable Anzahl von Parametern abhängig vom Kontext der Kindklasse haben können. Gibt es eine strukturierte Möglichkeit, dies zu überwinden, oder muss ich func_get_args verwenden?

    
tipu 01.11.2011, 19:29
quelle

2 Antworten

3

Sie müssen func_get_args verwenden, wenn Sie variable Argumente in Ihrer Funktion haben wollen. Beachten Sie, dass func_get_args alle an eine PHP-Funktion übergebenen Argumente erhält.

Sie können jedoch eine Mindestanzahl von Argumenten erzwingen, die an die Funktion übergeben werden, indem Sie ihnen entsprechende Parameter hinzufügen.

Zum Beispiel: Angenommen, Sie haben eine Funktion, die Sie mit mindestens 1 Argument aufrufen möchten. Dann schreibe einfach folgendes:

%Vor%

Da Sie nun diese Definition von foo () haben, müssen Sie sie mindestens mit einem Argument aufrufen. Sie können auch eine variable Anzahl von Argumenten übergeben, wobei n & gt; 1 und empfange diese Argumente über func_get_args (). Beachten Sie, dass $ arg_list oben auch eine Kopie von $ param als erstes Element enthält.

    
Zaki Saadeh 01.11.2011, 19:47
quelle
12

PHP tut dies, um Polymorphie zu schützen. Jedes Objekt des geerbten Typs sollte so verwendet werden können, als ob sie vom übergeordneten Typ wären.

Betrachten Sie die folgenden Klassen:

%Vor%

... und der folgende Code:

%Vor%

makeAnimalRun sollte run für jede Instanz von Animal 's geerbten Klassen ausführen können, aber da die Horse Implementierung von run einen $speed Parameter benötigt, den $animal->run() Aufruf in makeAnimalRun schlägt fehl.

Glücklicherweise gibt es eine einfache Lösung dafür. Sie müssen lediglich einen Standardwert für den Parameter in der überschriebenen Methode angeben.

%Vor%     
idmadj 10.04.2014 01:36
quelle

Tags und Links