Polymorphismus mit unterschiedlichen Parametertypen

mille

Erfahrenes Mitglied
Hey!

meine folgende Frage bezieht sich auf PHP 5 insbesondere aber auf PHP 4.x

Kann ich in PHP bei der Funktionsdefinition in PHP auch den zu erwartenden Paramtertyp als auch den Zieltyp angeben?

Bsp:
PHP:
int function zaehleBuchstaben(String $parameter)

Wenn das möglich ist müsste ja dann logischerweise auch folgender Polymorphismus moeglich sein:
PHP:
class geometrie{

int function zaehleElemente(String $parameter){ .... } // zählt die Buchstaben den übergebenen STRINGS

int function zaehleElemente(int[] $parameter){....} // zählt die Anzahl der Elemente des Arrays
}

Ich weiss das dies kein besonderes Beispiel ist, aber ich denke ihr versteht was ich meine.

Polymorphismus allgemein ist ja moeglich (wenn die FUnktionen die sich überlagern eine unterschiedliche Anzahl von Parametern haben). Mir gehts aber speziell um die Typen (Wie man das aus andern Sprachen wie Java bspw kennt).

mFg
 
Meiner Meinung nach geht das nicht - vielleicht ist mein Wissean aber auch überholt. Sollte ich diese Aufgabenstellung lösen, würde ich innerhalb einer Funktion prüfen, welchem Typ der übergebene Parameter angehört.

--> [phpf]is_array[/phpf]
--> [phpf]is_bool[/phpf]
--> [phpf]is_numeric[/phpf]
--> [phpf]is_string[/phpf]
usw.

Und anschließend entsprechend reagieren.

Sven
 
Jo, so hab ich das bisher auch gelöst.
Nur ist das programmiertechnisch nicht ungedingt elegant ;)
 
Mir ist auch keine Möglichkeit bekannt, denn Rückgabewert einer Funktion/Methode zu definieren (an VOID gar nicht zu denken :o)) oder Methoden anhand der Parameterliste gar zu überlagern. Der Preprocessor dürfte einzig und allein anhand des Funktionsnamens unterscheiden.

Ich hab allerdings bisher noch nie mit PHP 5 gearbeitet. Nur schon gehört, dass die OOP dort besser implementiert sein soll...

Meiner Meinung nach ist und bleibt PHP einfach eine strukturierte Programmiersprache, die ein wenig auf Objektorientiertheit getrimmt ist (alleine schon wegen der fehlenden "Härte" des Preprocessors - Variablendeklaration -> Was ist das :))

Muss mir mal die 5er saugen und sehen was die drauf hat.
 
Zuletzt bearbeitet:
Im Prinzip kann ich den bisherigen Antworten nichts wesentliches hinzufügen.
Was allerdings zu bedenken ist: PHP ist keine streng typisierte Sprache. Soll heißen: PHP kümmert sich nicht um den Typ einer Variable oder eines Parameters, daher ist so etwas wie "Polymorphismus" in einer Skriptsprache wie PHP praktisch eigentlich gar nicht möglich.

Gruß Marian
 
Du hast doch in der Funktion so oder so eine Unterscheidung (If oder switch), wo du auf die einzelnen Fälle eingehen musst.
Da isses doch egal, ob du das mitübergibst, oder innerhalb abfängst.

Ausserdem kannst du in PHP immer leicht einen Typ beeinflussen, falls du sie ändern musst.
 
Da wir gerade beim Thema Typiesierung und Casting sind:
Gibt es eine Möglichkeit den Preprocessort dazu zu zwingen, dass er eine strenge Typisierung verlangt

Ich kenne nur die Warnings, die aber auch nicht wirklich hilfreich sind...

Und ich kenne eigentlich niemanden, der in PHP wirklich eine saubere Initialisierung der Variablen vornimmt (geschweige den Definition). Ich denke da nur an "Ach, hier brauch ich noch schnell ne Hilfsvariable..". :-)

Das automatische Typcasting ist zwar recht angenehm, gibt es in echten höheren Sprachen in der Form aber eigentlich überhaupt nicht (Java, C++...).
 
Zurück