php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben || php-forumjetzt anmelden
 

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.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 2 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 26-04-2006, 03:03
Master0Blicker
 Registrierter Benutzer
Links : Onlinestatus : Master0Blicker ist offline
Registriert seit: Jun 2005
Beiträge: 358
Master0Blicker ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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.....
Mit Zitat antworten
  #2 (permalink)  
Alt 26-04-2006, 03:20
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

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 
extends A{
 function 
af(){echo"af aus B ruft "parent::af();}
}

$ding=new B;
$ding->af(); 
kopieren und einfügen muss du selber
Mit Zitat antworten
  #3 (permalink)  
Alt 26-04-2006, 03:54
Master0Blicker
 Registrierter Benutzer
Links : Onlinestatus : Master0Blicker ist offline
Registriert seit: Jun 2005
Beiträge: 358
Master0Blicker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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!
Mit Zitat antworten
  #4 (permalink)  
Alt 26-04-2006, 07:37
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

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...
Mit Zitat antworten
  #5 (permalink)  
Alt 26-04-2006, 08:58
closure
 Master
Links : Onlinestatus : closure ist offline
Registriert seit: Mar 2006
Beiträge: 796
closure ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
__________________
(((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")
Mit Zitat antworten
  #6 (permalink)  
Alt 26-04-2006, 11:02
st@tic
 Registrierter Benutzer
Links : Onlinestatus : st@tic ist offline
Registriert seit: Mar 2004
Beiträge: 344
st@tic ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #7 (permalink)  
Alt 26-04-2006, 11:59
closure
 Master
Links : Onlinestatus : closure ist offline
Registriert seit: Mar 2006
Beiträge: 796
closure ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

man kann overloading faken mittels

func_num_args
func_get_args
func_get_arg

aber wie gesagt, das ist nicht so schön.
__________________
(((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")
Mit Zitat antworten
  #8 (permalink)  
Alt 26-04-2006, 12:21
Master0Blicker
 Registrierter Benutzer
Links : Onlinestatus : Master0Blicker ist offline
Registriert seit: Jun 2005
Beiträge: 358
Master0Blicker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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 ?
Mit Zitat antworten
  #9 (permalink)  
Alt 26-04-2006, 13:03
closure
 Master
Links : Onlinestatus : closure ist offline
Registriert seit: Mar 2006
Beiträge: 796
closure ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
__________________
(((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

Geändert von closure (26-04-2006 um 13:13 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 26-04-2006, 14:09
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

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....
Mit Zitat antworten
  #11 (permalink)  
Alt 26-04-2006, 14:45
Master0Blicker
 Registrierter Benutzer
Links : Onlinestatus : Master0Blicker ist offline
Registriert seit: Jun 2005
Beiträge: 358
Master0Blicker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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.....
Mit Zitat antworten
  #12 (permalink)  
Alt 26-04-2006, 15:48
closure
 Master
Links : Onlinestatus : closure ist offline
Registriert seit: Mar 2006
Beiträge: 796
closure ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
__________________
(((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")
Mit Zitat antworten
  #13 (permalink)  
Alt 26-04-2006, 16:10
shapeless
 Newbie
Links : Onlinestatus : shapeless ist offline
Registriert seit: Apr 2006
Beiträge: 18
shapeless ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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.
Mit Zitat antworten
  #14 (permalink)  
Alt 26-04-2006, 16:18
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #15 (permalink)  
Alt 01-02-2022, 15:24
derVERERBER
 Registrierter Benutzer
Links : Onlinestatus : derVERERBER ist offline
Registriert seit: Feb 2022
Beiträge: 1
derVERERBER befindet sich auf einem aufstrebenden Ast
Exclamation amogus

sus
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

OnPremise versus Cloud - das richtige System finden
Wir beleuchten in diesem Artikel, die Vor- und Nachteile für Cloud oder OnPremise Systemen. Und warum es definitiv Zeit wird in die Cloud zu wechseln.

09.05.2022 | julia_mjr

Warum Texterstellung mit künstlicher Intelligenz richtig gut ist
Warum Texterstellung mit künstlicher Intelligenz richtig gut istKünstliche Intelligenz ist dabei, die Welt zu erobern. Die größten Unternehmen entwickeln Systeme, die einen Text für Sie schreiben können. Und sie machen das sehr gut.

05.01.2022 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

01.07.2022 Berni | Kategorie: PHP/ Anzeigenmarkt
NewsLetter Script PHP ansehen NewsLetter Script PHP

NewsLetter Script PHP is a simple email subscriptions newsletters script written in PHP and MySQL. Admin could send news in the letters to a mailing list of subscribed visitors. All the news and subscription form could be placed into a page of your web

28.06.2022 nevenov | Kategorie: PHP/ Mail
Contact Form PHP ansehen Contact Form PHP

Each website needs a contact form - Contact Form PHP script is very easy to install on your contacts page and administer.

27.06.2022 nevenov | Kategorie: PHP/ Formular
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:26 Uhr.