[PHP] Polymorphie nur mangelhaft unterstützt?
-
Hi,
ich habe folgenden Code:
abstract class abstract_class { public function __construct () { abstract_function (); } abstract public function abstract_function (); }; final class my_test extends abstract_class { public function __construct () { parent::__construct (); } public function abstract_function () { echo __FUNCTION__; } }; $instance = new my_test ();
Bekomme jedoch die Meldung:
Fatal error: Call to undefined function abstract_function() in H:\test.php on line 7Was muss ich machen, damit der Code funktioniert?
-
ich glaub' sowas geht erst ab php5...
-
ten schrieb:
ich glaub' sowas geht erst ab php5...
das ist PHP5
-
mit $this-> funktioniert es:
public function __construct() { $this->abstract_function(); }
-
hat logik, da über das kind my_test ein objekt hergestellt wird, das zwar abgeleitet wurde von abstract, aber doch nur ein kindobjekt ist.
fehlt das "this" des kindes, also die adresse des objekts, sucht er die definition der elterklasse, die ja wegen abstrakt fehlt.
ob polymorphie? hmm wenn ich mir dieses beispiel hier..
http://www.usegroup.de/software/phptutorial/objektorientierung.html
das mit den cAbstractAnimals, mensch und hund, anschaue, zumindest kann man es irgendwie nachbauen.aber irgendwie fehlt mir das dynamische binden zur laufzeit?
(kann man das mit nested klassen nachbaun, oder waren die für etwas anderes.. mal überlegen)
-
fehlt das "this" des kindes, also die adresse des objekts, sucht er die definition der elterklasse, die ja wegen abstrakt fehlt.
Äh, so viel ich weiß, sucht PHP, wenn das $this fehlt, eine Funktion namens "abstract_function()" die sonst wo deklariert wurde und nicht eine Methode "abstract_function()" der eigenen oder der Elternklasse(n).
-
mir gefällts nicht. so oder so
aber du hast recht, logisch wäre es wegen fehlender polymorphie, das eine globale funktion gesucht wird..
warum muss php sich winden und wi(ü)rken, nur um solcherlei überkandidelte(für php) dinge mit in die sprache reinzuhängen..
aber ok.
spaß macht es allemal, ein wenig rumzutesten.