Polymorphie in PHP
Daniel
- php
0 Christian H.0 Daniel0 Christian H.0 Daniel
0 Christian0 Daniel
0 Christian Seiler
ALoha Leute,
also mal ne Frage. Ich habe einen Konstruktor und jetzt möchte ich den Konstruktor einmal mit und einmal ohne Übergabeparameter. Wie geht das?
Naja ich weiß wie es nicht geht (hmm warum nicht? so sollte es eigentlich gehen):
class test {
var $id;
var $text;
functions test (){
$this->id = 2;
$this->text = "bla";
}
functions test ($idpara, $textpara){
$this->id = $idpara;
$this->text = $textpara;
}
function getID (){
return this->id;
}
}
$objekt1 = new test();
$objekt2 = new test(12, "blabla");
echo $objekt1->getID();
echo $objekt2->getID();
Naja und das gibt nen Fehler. Weiß jemand etwas dazu?
Bis dann
Daniel
Hallo Daniel,
also mal ne Frage. Ich habe einen Konstruktor und jetzt möchte ich den Konstruktor einmal mit und einmal ohne Übergabeparameter. Wie geht das?
Ein Link in die de.comp.lang.php FAQ
10.6. Was sind polymorphe Funktionen? Kann ich sie simulieren?
http://www.dclp-faq.de/q/q-klassen-polymorphie.html
Gruß
Christian
Hi Christian,
na das ist ja schon ne Antwort. Leider zwar keine Zufriedenstellende, da es leider keine Polymorphie gibt, aber ok
Danke für deine Antwort
Daniel
na das ist ja schon ne Antwort. Leider zwar keine Zufriedenstellende, da es leider keine Polymorphie gibt, aber ok
Wir warten auf PHP5 ;-)
Gruß
Christian
Hi!
Wir warten auf PHP5 ;-)
Ist das schon in Entwicklung?
Gruß
Daniel
Wir warten auf PHP5 ;-)
Ist das schon in Entwicklung?
Ja http://snaps.php.net/
Hi,
du könntest dem Konstruktor evtl Defaultwerte verpassen:
class test {
var $id;
var $text;functions test ($idpara = 2, $textpara = "bla"){
$this->id = $idpara;
$this->text = $textpara;
}function getID (){
return this->id;
}
}$objekt1 = new test();
$objekt2 = new test(12, "blabla");
echo $objekt1->getID();
echo $objekt2->getID();
Defaultwerte müssen, aber immer am Ende der Parameterliste stehen!
Gruß
Christian
Hi Christian (ist heute Christian helfen anderen Tag;)),
also das ist natürlich auch ne gute Möglichkeit... Danke
Bis dann
Daniel
Hallo Daniel,
Und hier die komplett generische Lösung:
---- Pseudocode:
function mache (array $a) {
...
}
function mache (int $a, bool $b) {
...
}
function mache (string $a, string $b) {
...
}
---------
wird zu:
------ PHP-Code
function mache_array ($a) {
...
}
function mache_intbool ($a, $b) {
...
}
function mache_2string ($a, $b) {
...
}
function mache () {
$arg_list = func_get_args ();
if (count ($arg_list) == 1) {
if (is_array ($arg_list[0])) {
return mache_array ($arg_list[0]);
} else {
return;
}
} else if (count ($arg_list) == 2) {
if (is_int ($arg_list[0]) && is_bool ($arg_list[1])) {
return mache_intbool ($arg_list[0], $arg_list[1]);
} else if (is_string ($arg_list[0]) && is_string ($arg_list[1])) {
return mache_2string ($arg_list[0], $arg_list[1]);
} else {
return;
}
} else {
return;
}
}
-------
Diese Lösung ist zwar recht kompliziert, aber damit kann man *jede* Art von Polymorphie in PHP simulieren.
Viele Grüße,
Christian
Hi Christian,
na klar.. das geht natürlich auch... naja aber ich habs jetzt so gemacht, dass ich einfach optionale Parameter mache, weil ich das ganze auch im Konstruktor brauch und der ggf. nicht mit Parameter übergeben wird.
Hallo Daniel,
aja aber ich habs jetzt so gemacht, dass ich einfach optionale Parameter mache, weil ich das ganze auch im Konstruktor brauch und der ggf. nicht mit Parameter übergeben wird.
Schon klar, dass Du eine bessere Lösung hast. Ich wollte Dir nur eine andere Lösung vorstellen, die funktioniert, wenn Du mal komplexere Dinge brauchst als optionale Parameter. (außerdem schreibe ich einige Antworten auch für das Archiv :-))
Viele Grüße,
Christian
Hi Christian,
sollte jetzt nichts negatives gegen dich sein, hoffentlich kam das jetzt nicht so rüber...
Naja bis dann mal
Daniel
Hallo Daniel,
sollte jetzt nichts negatives gegen dich sein, hoffentlich kam das jetzt nicht so rüber...
Nein, ich wollte nur eine Sache klarstellen, die ich im ersten Posting nicht so ganz deutlich rübergebracht habe. :-)
Viele Grüße,
Christian