Aiun Geschrieben 4. August 2005 Teilen Geschrieben 4. August 2005 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* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DaFox Geschrieben 7. August 2005 Teilen Geschrieben 7. August 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 8. August 2005 Teilen Geschrieben 8. August 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.