Zum Inhalt springen

[PHP5] Methoden überladen


Empfohlene Beiträge

hi,

1. weis jemand wann das Feature der Überladung in PHP5 integriert wird ?

mich nervt es etwas für eigentlich die gleiche Funktion immer wieder neue Namen zu suchen, nur weil sich die Parameter geändert haben.

ein function test($var1, $var2 = "")

hilft mir da auch nicht weiter, denn schon die ersten Variablen verändern je nach Funktion ihren Zweck erheblich.

von daher die Hoffnung das es noch kommt... ?

2. Warum werden Parent Konstruktoren nicht automatisch aufgerufen ?

nein, ich muss im Konstruktor meiner Kindklasse einen expliziten Parent:: aufruf machen..*hmpf*

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi,

1. weis jemand wann das Feature der Überladung in PHP5 integriert wird ?

AFAIK ist nichts in diese Richtung geplant, warum auch?

mich nervt es etwas für eigentlich die gleiche Funktion immer wieder neue Namen zu suchen, nur weil sich die Parameter geändert haben.

Ja, das musst du auch nicht. Nach aussen hin kannst du eine API bauen, wie du sie aus JAVA kennst, aber intern ist das dann ziemlicher Murks, s.u.

ein function test($var1, $var2 = "")

hilft mir da auch nicht weiter, denn schon die ersten Variablen verändern je nach Funktion ihren Zweck erheblich.

Allerdings, aber du kannst die Argumenteliste auch ganz weglassen und dann innerhalb der Methode mit "func_num_args()" die Anzahl der Argumente, die übergeben wurden, zählen und mit "func_get_arg()" darauf zugreifen. Das ist ausreichend flexibel, aber wie gesagt etwas krampfhaft.

    public function __construct() {
if(func_num_args() == 0) {
self::__construct_params(new HTTPClient_Params());
}

else if(func_num_args() == 1) {
$object = func_get_args(0);

if($object instanceof HTTPClient_Params) {
self::__construct_params($object);
}
else if($object instanceof HTTPClient_HttpConnectionManager) {
self::__construct_manager($object);
}
}

else {
self::__construct_params_manager(
func_get_args(0),
func_get_args(1)
);
}
}
[/PHP]

von daher die Hoffnung das es noch kommt... ?

Ich glaube nicht, dass es noch kommt. Für PHP 5.1 ist es nicht vorgesehen und es würde mich auch wundern, da man es für dynamisch getypte Sprachen gar nicht braucht. Wie willst du in der Funktionssignatur zwischen int und string unterscheiden?

2. Warum werden Parent Konstruktoren nicht automatisch aufgerufen ?

nein, ich muss im Konstruktor meiner Kindklasse einen expliziten Parent:: aufruf machen..*hmpf*

Weil das so implementiert wurde und es auch Sinn macht. Wenn du den Contructor überschreibst, dann willst du nicht zwangsläufig, dass der Parent-Constructor aufgerufen wird. Überschreibst du den Constructor nicht, dann wird der Parent-Constructor automatisch aufgerufen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

2. Warum werden Parent Konstruktoren nicht automatisch aufgerufen ?

nein, ich muss im Konstruktor meiner Kindklasse einen expliziten Parent:: aufruf machen..*hmpf*

Zur überladenen Funktion: Du kannst den Typ der Variablen ja in der Funktion prüfen (http://de.php.net/gettype) und dort dann entscheiden, was du machst. Da du in der Definition keine Typen mit angeben kannst, wäre eine Überladung ja auch schlecht möglich.

Bei anderen Sprachen prüft der Compiler, welche der überladenen Funktionen gerade gebraucht wird (anhand des Var-Types), hier musst du das eben selber machen.

Und zu 2.: Ich kenne das nicht anders von Delphi z.B.. In jeder abgeleiteten Klasse rufst du in einer überschriebenen Methode die Methode der Parentklasse gezielt auf, wenn du sie brauchst. Kann ja sein, dass du die Methode überschrieben hast, weil das Verhalten der Parentklasse nicht passt und du das auch gar nicht brauchst. Und der Konstruktor ist nur eine ganz spezielle Methode, sonst nichts.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...