Mailinglisten-Archive |
Hi, On Sunday 16 May 2004 19:59, Roland Tapken wrote: > Ich find es sehr toll dass man bei der Übergabe von Objekten an > Funktionen nun eine Klasse erzwingen kann, der das Objekt angehören > muss. Allerdings ist dieses Feature mehr oder weniger unbrauchbar wenn > man Funktionen nicht überladen kann. Ist das inzwischen irgendwie > möglich? Ich denke mal Du willst wissen ob sowas geht: <?php function foo(someClass $objekt) { echo 1; } function foo(someOtherClass $objekt) { echo 2; } ?> Das geht _nicht_ (ansosnten hilft auch ein kurzes testen, ein aktuelles PHP5 sollte ja jeder parat liegen haben, ansonste ist es ja auch schnell kompiliert, Ergebnis ist jedenfalls in der Art:: "Fatal error: Cannot redeclare foo() (previously declared in -:2) in - on line 8") und das wird auf absehbare Zeit auch nicht anders werden. Dazu gab es schon ein paar mal entsprechende Diskussionen[1] auf der PHP-internals Liste[2], die alle damit endeten, dass das nich implementiert werden wird. Für die Argumente empfehle ich das Archiv zu durchsuchen... Typehints haben in PHP das Ziel es unnötig zu machen in einer Funktion/Methode abfragen zu müssen ob man die richtige Klasse übergeben bekommen hat, so dass man direkt Methodenaufrufe machen kann ohne in der Funktion/Metode Gefahr zu laufen, dass es die Methode nicht gibt. Also <?php function foobar(someClass $objct) { $object->doSomething(); } // vs. function foobar($object) { if (!is_a($object, 'someClass')) { throw new exception('Paramter is no instance of someClass'); } $object->doSomething(); } ?> Ob man es wirklich braucht... Während der entwicklung ischer ganz nett, später sollte es ja _eigentlich_ immer die richtigen Klassen an richtiger Stelle geben ;-) Im aktuellen PHP5RC2 ist es bei einem Typehint zu einer bestimmten Klasse auch NULL zu übergeben - was zu Folge hat, dass man in der funktion/Methode doch wieder kontrollieren muss ob es NULL oder Klasse ist. Dieses Verhalten soll, wenn ich die Diskussion richtig verfolgt hbe, aber bis zu RC3 (bzw. wurde inzwischen) dahingehend geändert, dass NULL nicht erlaubt wird und für PHP5.1 eine Möglichkeit geschaffen werden soll, dass auch NULL möglich ist, damit man einen Typehint als optionalen Paramter haben kann. In der Diskussion[3] waren da solche Konstrukte: <?php function foo(SomeClass OR NULL $class = NULL); //oder auch function bar(NULLABLE SomeClass $class = NULL); ?> Damit sind aber auch die Entwickler nicht zufrieden weswegen dass, wie gesagt, auf PHP5.1 verschoben wurde. johannes [1] http://marc.theaimsgroup.com/?l=php-dev&m=108247263010912&w=2 [2] http://php.net/mailing-lists.php [3] http://marc.theaimsgroup.com/?l=php-dev&m=108344217529912&w=2
php::bar PHP Wiki - Listenarchive