PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |
|

26-04-2006, 03:03
|
Master0Blicker
Registrierter Benutzer
|
|
Registriert seit: Jun 2005
Beiträge: 358
|
|
Gibt es Polymorphie auch in PHP ?
Hallo Leute,
kann ich eigentlich in PHP wie auch in C++ Funktionen überschreiben ?
Ich habe in meiner Root-Klasse eine Funktion die ich so eigentlich für jedes vererbte Klasse benötige....nur bei ein oder zwei benötige ich eine leicht abgeänderte Funktion.
So, jetzt könnte ich das irgendwie lösen, am saubersten wäre natürlich das ich diese Funktion überschreibe. Ist das in PHP auch möglich wie in C++ ? Wenn ja, wie ?
C++ und PHP ähneln sich ja ziemlich, daher würde mich das nun wundern wenn das nicht gehen würde.....aber in Google ist dieses Thema sehr dünn besiedelt......wenn sogar nahezu gar nicht oder ungenau.....
|

26-04-2006, 03:20
|
Slava
PHP Senior
|
|
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
|
|
sorry!
warum so viel schreiben?
warum so viel in google nachschauen?
du kannst doch das mit 5 zeilen testen!!!
ok ich mache das für dich
PHP-Code:
class A{
function af(){echo"af aus A";}
}
class B extends A{
function af(){echo"af aus B ruft "; parent::af();}
}
$ding=new B;
$ding->af();
kopieren und einfügen muss du selber
|

26-04-2006, 03:54
|
Master0Blicker
Registrierter Benutzer
|
|
Registriert seit: Jun 2005
Beiträge: 358
|
|
Danke du Schlaumeier....und das war natürlich lieb gemeint
Woher soll ich wissen das da ein
PHP-Code:
parent::Funktionsname()
nach der Funktion kommt ?
In C++ erstelle ich eben nur eine neue Funktion mit gleichem Namen soweit ich mich noch erinnern kann.......
Falls das so nicht stimmt so enschuldige ich mich und bezeichne mich bis Weihnachten täglich mindestens 10x als Schlaumeier....
Und genau das habe ich so ausprobiert mit negativem Ergebnis.....daher auch Google und hier Fragen....was mir natürlcih wiedereinmal weiter geholfen hat.....
Also danke dir!
|

26-04-2006, 07:37
|
mrhappiness
PHP Guru
|
|
Registriert seit: Oct 2002
Beiträge: 14.890
|
|
Zitat:
Original geschrieben von Master0Blicker
Woher soll ich wissen das da ein
PHP-Code:
parent::Funktionsname()
nach der Funktion kommt ?
In C++ erstelle ich eben nur eine neue Funktion mit gleichem Namen soweit ich mich noch erinnern kann.......
|
In PHP auch...
parent::funktionsname() brauchst du nur, um auch die Methode der übergeordneten Klasse aufrufen zu können, falls erforderlich
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
|

26-04-2006, 08:58
|
closure
Master
|
|
Registriert seit: Mar 2006
Beiträge: 796
|
|
Zitat:
Original geschrieben von Master0Blicker
Und genau das habe ich so ausprobiert mit negativem Ergebnis.....daher auch Google und hier Fragen....was mir natürlcih wiedereinmal weiter geholfen hat.....
|
Wie sah denn der versuch aus ? Hatte deine methode
die exakt gleiche signatur wie die der elternklasse ?
Wie man methoden von elternklassen überschreibt weisst du ja
jetzt.
Noch ein wort zum overloading in php generell.
Es ist in php nicht mit sprachmitteln möglich methoden zu
überladen wie man es aus anderen sprachen kennt, in dem
man die signatur ändert.
PHP-Code:
class foo{
public function bar($var){}
public function bar($var,$var2){}
}
Sowas funktioniert leider nicht. Man kann sich zwar behelfen
aber das ist dann eben kein out-of-the-box-support mehr.
greets
|

26-04-2006, 11:02
|
st@tic
Registrierter Benutzer
|
|
Registriert seit: Mar 2004
Beiträge: 344
|
|
jo das überschreiben von methoden wäre wirklich wünschenswert bei php. ich behelfe mir entweder indem ich die maximale anzahl von parametern angebe und einfach alle nicht benötigten bei der parameter angabe leer lasse oder null angebe. in ner if abfrage in der methode selbst wird dann überprüft was er machen soll
oder die simplere methode einfach mehr methoden deklarieren und denen eigene namen geben wie
GetUserByID
GetUserByName
aber solangsam sollten die wirklich mal das überschreiben einführn
|

26-04-2006, 11:59
|
closure
Master
|
|
Registriert seit: Mar 2006
Beiträge: 796
|
|
Hi,
man kann overloading faken mittels
func_num_args
func_get_args
func_get_arg
aber wie gesagt, das ist nicht so schön.
|

26-04-2006, 12:21
|
Master0Blicker
Registrierter Benutzer
|
|
Registriert seit: Jun 2005
Beiträge: 358
|
|
Ach stimmt...hatte vergessen zu erwähnen das ich die Paramter bzw. Signatur ändern wollte...
also
Code:
function funk($var1){.....};
wollte ich überschreiben mit
Code:
function funk($var1, $var2){...}:
Ich wollte auch verschiedene Konstruktoren erstellen für eine Klasse jeweils mit verschiedenen 'signaturen' bzw. Parametern...in C++ auch üblich.... ging auch nicht......
Also :
Code:
function classname(){...};
function classname($var1){...};
Ging auch nicht..........
P.S. leigts nun an mir ? Muss ich jeden Tag bis Jahresende 10x 'Ich bin ein Schlaumeier sagen ?
|

26-04-2006, 13:03
|
closure
Master
|
|
Registriert seit: Mar 2006
Beiträge: 796
|
|
Hi,
du kannst im prinzip so ziemlich alles was du über c++ weisst
vergessen wenn du php programmierst. Viele dinge funktionieren
einfach anders. Ich habe die selbe erfahrung machen müssen.
Besonders grausam wurde es als um referenzen in php ging.
Also kurzum, man kann methoden in php nicht auf diese weise
überladen. Der ctor ist auch eine methode geht also ebenfalls
nicht.
greets
und viel spaß im grausamen land der hebräischen fehlermeldungen
und der unendlichen inkonsistenz, kurzum: Welcome to PHP
Geändert von closure (26-04-2006 um 13:13 Uhr)
|

26-04-2006, 14:09
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.105
|
|
Zitat:
du kannst im prinzip so ziemlich alles was du über c++ weisst
vergessen wenn du php programmierst. Viele dinge funktionieren
einfach anders. Ich habe die selbe erfahrung machen müssen.
Besonders grausam wurde es als um referenzen in php ging.
|
genau so ist es! Keine polymorphie, kein operatoren überladen, keine funktionen überladen, nur ein konstruktor.....
Aber dafür fallen die Typen in PHP komplett vom Programmierer weg und insgesamt ist php eine um einiges einfachere Sprache als c++. Nur müssen wir dafür leider auf so einiges verzichten....
|

26-04-2006, 14:45
|
Master0Blicker
Registrierter Benutzer
|
|
Registriert seit: Jun 2005
Beiträge: 358
|
|
Aber die Möglichkeit besteht trotzdem das das in zukünftigen PHP-Versionen alles umgesetzt wird, oder ?
Denn die Vorteile von PHP kombiniert mit allen Vorteilen von C++ wäre doch genial........
Keine Variablendeklarationen, oder z.B. ziemlich lockerer Umgang mit Fehlern (wie ich bemerkt habe), usw... mit allen Möglichkeiten von C++ wie Klassen, Vererbung, dann noch die Möglichkeit Funktionen überladen usw.....
Aber meine 2. Frage hab ich noch nicht beantwortet bekommen (vielleicht untergegangen oder nicht richtig gefragt):
Kann ich in PHP wie auch in C++ verschieden Konstruktoren für eine Klasse benutzen nur mit unterschiedlichen Parameterübergaben ?
Also wenn ich keine Parameter übergebe dann Konstruktor()....wenn ich einen entsprechenden Parameter übergebe dann Konstruktor($var1).....usw ?
In C++ geht das ja prima.....
|

26-04-2006, 15:48
|
closure
Master
|
|
Registriert seit: Mar 2006
Beiträge: 796
|
|
Hi,
in einem nebensatz habe ich gesagt dass der ctor in php
auch nur eine methode ist und methoden können in php
nicht auf die in c++ gewohnte weise überladen werden.
Daraus folgt => Nein , es geht nicht out-of-the-box.
Man kann die von mir genannten funktionen für sowas nehmen
und dann an private init-methoden weiterleiten.
Zum ersten teil:
Nein, es ist sehr unwahrscheinlich dass das alles in php kommen
wird. Ich hab irgendwo mal die meinung der zend-leute zu dem
thema gelesen und die wollen die meisten features , die c++-programmierer
vermisssen gar nicht.
Ich weiss nicht in wieweit du dich mit php5 auseinander gesetzt hast,
aber da sind ein paar sachen die man sich wünscht schon realisiert.
Es ist sogar möglich den operator-[] zu überladen. Leider ist
das auch der einzige operator den man überladen kann.
PHP tickt anders als c++, ganz klar, es ist auch für eine
völlig anderen problemdomäne entwickelt worden.
greets
|

26-04-2006, 16:10
|
shapeless
Newbie
|
|
Registriert seit: Apr 2006
Beiträge: 18
|
|
Zitat:
Original geschrieben von closure
Zum ersten teil:
Nein, es ist sehr unwahrscheinlich dass das alles in php kommen
wird. Ich hab irgendwo mal die meinung der zend-leute zu dem
thema gelesen und die wollen die meisten features , die c++-programmierer
vermisssen gar nicht.
|
Joa, so ist es wohl , nur hat man auch manchmal den Eindruck, dass sie auch Sachen machen, die sie, oder manche von ihnen, nicht wollen.
Letzendlich scheint es mir, und ich bin alles andere als ein experte in Sachen php,
als ob sie für die Dinge die sie aus C++, oder auch anderen echten OO-Sprachen,
nicht wollen, eine Art Kompromiss-addon einflicken.
So kam es mir bisher vor und auch das Protokoll des Meetings aus Paris, im November ( bzgl php6 ) scheint auch keine Änderung daran anzukündigen.
So merkt man doch irgendwie den Mangel an Erfahrung der Entwickler, wenn
man die Vorschläge, Diskussionen und die dann letzendlichen Zusammenfassungen betrachtet..
Es werden wohl weiterhin OO-Features hinzugefügt, andere nicht und alte "fehler" der Sprache immer weiter als Deprecated deklariert, denn löschen wollen sie sorecht nichts..
Naja , ich weiss ja auch nicht ob es ein neueres Meeting der Zend Leute gab, in dem Dinge beschlossen wurden ( bzw die Planung dieser Dinge ), aber
mit meinem Stand kann ich closure nur zustimmen und werd mich damit abfinden, dass ich mit php bestimmte schöne dinge nicht machen werden kann.
|

26-04-2006, 16:18
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Zitat:
Original geschrieben von shapeless
[...] und alte "fehler" der Sprache immer weiter als Deprecated deklariert, denn löschen wollen sie sorecht nichts..
|
Ist ja auch verständlich - denn dann wären für viele Scripte Anpassungen erforderlich, wenn auf eine neue Version upgedatet wird.
Und wie viele Leute einfach nur "Anwender" fertiger Scripte sind, ohne jegliche Ahnung, sieht man ja hier tagtäglich. Und die würden dann ziemlich in die Röhre schauen, wenn ihr Provider neurere PHP-Versionen nutzt.
Andersherum können genügend solcher Anwender auch entsprechend Druck auf ihren Provider ausüben - dann verkehrt sich das ganze letztendlich in den Effekt, dass die Provider eben keine PHP-Updates mehr vornehmen - wäre auch Mist.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

01-02-2022, 15:24
|
derVERERBER
Registrierter Benutzer
|
|
Registriert seit: Feb 2022
Beiträge: 1
|
|
amogus
sus
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|