php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.04.2007, 01:21  
Erfahrener Benutzer
 
Registriert seit: 05.09.2004
Beiträge: 106
PHP-Kenntnisse:
Fortgeschritten
MaMo-Net
Standard Ermitteln ob Methode geerbt wurde oder nicht?

Hallo,

ich hoffe ihr könnt mir helfen. Ich möchte ermitteln ob eine Methode einer Klasse geerbt wurde oder nicht.

Ich habe eine Klasse QueryException und eine Klasse QueryBuilderException die jeweils die Klasse Exception erweitern. Die Klasse QueryException hat selber die Funktion __toString() definiert, die Klasse QueryBuilderException jedoch erbt von der Klasse Exception. Wie kann ich bei Übergabe eines der Objekte herausfinden, ob die Funktion __toString() nun von Exception geerbt wurde oder nicht?

Die PHP-Doku führt leider keine Funktion in dem Kapitel "Class/Object Functions" dazu auf. Mir kam bisher nur die (dreckige) Idee, die Rückgabe der Funktion zu überprüfen, ob der Inhalt der PHP Rückgabe ähnelt oder anders ist. Die Methode möchte ich jedoch nur nutzen wenn es wirklich nicht anders geht.

Danke für Hinweise,
MaMo
MaMo-Net ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.04.2007, 02:02  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

naja, der ganze punkt bei der vererbungsgeschichte ist der, nicht wissen zu müssen, wer was von wem erbt. dein vorhaben ist also eher kontraproduktiv.

für die _wenigen_ ausnahmen, in denen man wirklich interne informationen benötigt, kann man
http://de3.php.net/Reflection verwenden.
axo ist offline  
Alt 12.04.2007, 03:46  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Oder um axo zu ergänzen: Warum willst du das überhaupt wissen?
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 12.04.2007, 04:09  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

PHP-Code:
class a{
  function 
__toString(){return "ich bin es";}
  }
class 
extends a{
  function 
__toString(){return "ich bin es auch";}
  }

$b =new b;
$test=get_parent_class($b);
$a=new $test;
if(
method_exists($b,"__toString")&&
   
method_exists($a,"__toString")
   &&
   
$a->__toString()!=$b->__toString() )echo "die methode tostring ist überschrieben worden";
   else echo 
"die methode __toString ist geerbt"
__________________
Slava
http://bituniverse.com
Slava ist offline  
Alt 12.04.2007, 10:19  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Slava,

das funktioniert vielleicht in deinem kleinen Beispiel, aber in Realität wird die Ausgabe sicher immer unterschiedlich sein, da die Objekte, die als String ausgegeben werden sollen (und das ist die Aufgabe von toString) unterschiedlich sind.

@MaMo-Net: Ich schließe mich hier KingCrunch's Frage an: Warum muss das so sein? Für mich hört sich das wir schlechter Code an. Wenn man Exceptions unterscheiden möchte so wird das üblicherweise an Hand des Klassennamens erledigt.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 12.04.2007, 12:13  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

Zitat:
Zitat von dr.e.
Hallo Slava,

das funktioniert vielleicht in deinem kleinen Beispiel, aber in Realität wird die Ausgabe sicher immer unterschiedlich sein, da die Objekte, die als String ausgegeben werden sollen (und das ist die Aufgabe von toString) unterschiedlich sind.
eigentlich hat er auch ein spezieles Fall und gerade bei __toString() wird das bei erzeugen von neuen Objecten ohne parameter im konsturktor funktionieren.

Ich persönlich habe mich noch nie interessiert, ob eine methode überschrieben ist oder nicht. normale weise reicht es aus zu wissen welche type der Object hat, und das ist schon ausreichend um zu wissen ob da die methoden überschrieben worden.
__________________
Slava
http://bituniverse.com
Slava ist offline  
Alt 12.04.2007, 13:01  
Erfahrener Benutzer
 
Registriert seit: 05.09.2004
Beiträge: 106
PHP-Kenntnisse:
Fortgeschritten
MaMo-Net
Standard

Hi,

danke für eure Hinweise. Ich denke ich werde mir einmal mit der Reflection API ansehen, das war der Hinweis den ich haben wollte

Nun, wozu brauche ich das? Ist nichts großes und vllt. auch unsauber, aber ich hab mir nen "tollen" Exception-Handler gebaut. Nun sollte der mit als __toString alle Zusatzinformationen ausgeben, die ich noch so eingebaut habe beim erweitern. Da aber die __toString() Funktion nur etwas ausgiebt, dass ich eh schon ausgebe wollte ich bei den Exceptions also die Sachen nicht ausgeben, dazu brauchte ich den Unterschied.

Nun kann man das sicher auch anders machen und z.B. per Interface eine Methode vorgeben die dann immer implementiert wird, wenn man so eine Ausgabe haben möchte. Meint ihr diese Variante wäre besser? Wäre immerhin nur eine Methode... oder habt ihr einen besseren Vorschlag?

MfG MaMo
MaMo-Net ist offline  
Alt 12.04.2007, 16:40  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

Verstehe ich das richtig, dass Du etwas um eine Methode drumherum baust, die Du so geschrieben hast, dass sie nicht mehr tut, was von ihr erwartet wird und deshalb erst das Drumherum notwendig wird?
Schnulli ist offline  
Alt 12.04.2007, 17:00  
Erfahrener Benutzer
 
Registriert seit: 05.09.2004
Beiträge: 106
PHP-Kenntnisse:
Fortgeschritten
MaMo-Net
Standard

Man kann es so sehen, ja...
MaMo-Net ist offline  
Alt 12.04.2007, 17:40  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Man kann es so sehen, ja...
Das ist schlechtes Design! Sowas würde ich an deiner Stelle ganz schnell wieder entfernen. Macht den Code unlesbar und unübersichtlich.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Herkunftsland so einfach wie möglich ermitteln? R4v3r PHP Tipps 2008 10 29.07.2008 14:40
Einzeltreffer von MATCH ... AGAINST ... ermitteln proud Datenbanken 3 09.05.2008 08:31
Auf static Methode von variabler Klasse zugreifen Riks PHP Tipps 2007 11 16.03.2007 15:08
Methode als gz_handler? Andreas PHP-Fortgeschrittene 5 11.04.2006 14:14
Die Position ein. Datensätzes aus einer Datenliste ermitteln Locutus007 Datenbanken 8 07.03.2006 16:59
Methode kann Methode nicht verwenden PHP Tipps 2006 2 05.03.2006 21:30
Dateiname, Dateigröße ermitteln HTML, Usability und Barrierefreiheit 5 29.01.2006 22:16
build nummer des bs ermitteln ... nur bei microsoft's bs!!! PHP Tipps 2005-2 2 24.07.2005 15:59
[Erledigt] Rekursive Methode PHP-Fortgeschrittene 7 02.06.2005 15:09
PHP5: Klassenattribut für statische Methode, mit Vererbung PHP-Fortgeschrittene 9 24.05.2005 09:35
Besucher mit den meisten GB Einträgen ermitteln! Datenbanken 7 21.04.2005 12:09
CRC Summe einer Datei ermitteln?? PHP Tipps 2004 1 14.10.2004 09:23
Methode kapseln PHP Tipps 2004 2 12.10.2004 10:53
[Erledigt] Tabellenname eines Feldes ermitteln PHP-Fortgeschrittene 3 22.09.2004 15:49
Zweithöchsten Wert ermitteln bicpi Datenbanken 6 12.09.2004 14:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
ob von klasse geerbt, php hat geerbt von, php welche klasse geerbt, php überprüfen ob methode überschrieben wurde, php geerbt von welchem, nicht wissen ob man geerbt hat, php geerbt von, wo kann ich herausfinden ob ich geerbt habe ?

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:47 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.