Fahrtenbuch genial!
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 15.09.2005, 21:21   #1
TP-Junior
 
Registriert seit: Sep 2005
tower macht alles soweit korrekt

OO: Vererbung / Nichtvererbung von Klassennamen


Hallo, bin neu hier und sitze wie die Ochs vor diesem Berg:

Eine Mutterklasse wird von mehreren Kindklasse beerbt. Über diese Kinder soll eine statische (!) Methode der Mutter aufgerufen werden können, die dann den Namen des jeweiligen Kindes ausgibt. Klingt beknackt, darum ein Beispiel:

PHP-Code:
class Instrument {
// ...
    
static function wer_bin_ich() {
        return [
mein_name]; // um den Inhalt der eckigen Klammer geht es!!!
    
}
}

class 
Geige extends Instrument {}
class 
Wollharfe extends Instrument {}

$instrument1 Geige::wer_bin_ich(); // soll 'Geige' ausgeben
$instrument2 Wollharfe::wer_bin_ich(); // soll 'Wollharfe' ausgeben 
Wäre schön, wenn jemand eine Lösung parat hätte. get_class() und __CLASS__ tun's allerdings nicht und mit $this oder so kann man auch nicht arbeiten.
tower ist offline   Mit Zitat antworten


Alt 15.09.2005, 21:39   #2
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein
Versteh ich richtig, dass dir get_class() nichts nutzt, weil du kein konkretes Objekt instanzieren willst?

Du könntest die statische Methode wer_bin_ich() in jeder abgeleiteten Klasse definieren und jede Implementierung den Klassennamen zurückliefern zu lassen, also:

PHP-Code:
 class Instrument {
// ...
    
static function wer_bin_ich() {
        return [
mein_name]; // um den Inhalt der eckigen Klammer geht es!!!
    
}
}

class 
Geige extends Instrument {

statuc function wer_bin_ich()
{
return 
'Geige';
}
}

... 
$instrument1 Geige::wer_bin_ich(); // soll 'Geige' ausgeben 
Allerdings frag ich mich, was Du mit der Sache bezwecken willst: Wenn Du nur statische Aufrufe machst, dann kennst Du den Klassennamen doch sowieso von vornherein (Du musst ihn für den Aufruf ja kennen) ?

Geändert von seb (15.09.2005 um 21:41 Uhr).
seb ist offline   Mit Zitat antworten
Alt 15.09.2005, 21:49   #3
TP-Junior
 
Registriert seit: Sep 2005
tower macht alles soweit korrekt
Hallo, danke für die flotte Antwort.

Nein, get_class gibt eben nur den Namen der Mutterklasse zurück, und den will ich nicht wissen. Und jedesmal neu implementieren? Nee, das muss auch eleganter gehen ;-)
Ich brauche den Namen natürlich, um innerhalb der wer_bin_ich() weitere Schweinereinen damit anstellen zu können, beispielsweise eine Datenbanktabelle gleichen Namens auszulesen...
tower ist offline   Mit Zitat antworten
Alt 15.09.2005, 21:50   #4
giv
TP-Senior
 
Benutzerbild von giv
 
Registriert seit: Jan 2003
Ort: Darmstadt
giv macht sich hier sehr viel Mühe
verrat mir ma bitte, wo du das brauchst? in jedem fall, wenn du die statische methode als solche aufrufst, musst du den klassennamen schon wissen, sonst kannst sie gar nicht aufrufen.

der sinn einer static deklaration besteht darin, die funktion aus dem objektkontext herauszunehmen. natürlich funktionieren dann alle dinge, die vom objektkontext abhängig sind, nicht!

EDIT

oh, da hat man ja schon einiges geschrieben...
__________________
forenregeln - 3.d) ... richtige groß- und kleinschreibung benutzen ...
giv ist offline   Mit Zitat antworten
Alt 15.09.2005, 21:53   #5
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein
Zitat:
Ich brauche den Namen natürlich, um innerhalb der wer_bin_ich() weitere Schweinereinen damit anstellen zu können, beispielsweise eine Datenbanktabelle gleichen Namens auszulesen...
Den Namen einer Klasse von einer geerbten statischen Methode einer Mutterklasse zurückliefern zu lassen, funktioniert nicht. mutter::wer_bin_ich() hat keinen Zugriff auf kind::klassenname, wenn die Methode statisch ist, sprich sich das Ganze nicht innerhalb einer konkreten Objektinstanz abspielt.

Geändert von seb (15.09.2005 um 22:01 Uhr).
seb ist offline   Mit Zitat antworten
Alt 15.09.2005, 22:14   #6
TP-Junior
 
Registriert seit: Sep 2005
tower macht alles soweit korrekt
Zitat:
funktioniert nicht, weil statische Eigenschaften und Methoden nicht vererbt werden
Schon klar, ich dachte hier auch mehr an einen kleinen 'Trick' oder sowas.

Reflection tut es übrigens auch nicht. Was will ich damit? Um in meinem Beispiel zu bleiben: Ohne die Funktion jedesmal neu schreiben zu müssen, soll über Geige::wer_bin_ich() z.B. das Notenblatt für die Geige inkludiert werden (das dann meinetwegen geige.txt heißt), Trompete::... lädt entsprechend die Blasmusik rein etc.
Wie gesagt: nur ein Beispiel. Eigentlich geht es um etwas komplexeres ;o)
tower ist offline   Mit Zitat antworten
Alt 15.09.2005, 22:18   #7
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein
Und wieso willst du keine konkreten Objekte instanzieren? Damit wär das Problem auf einen Schlag gelöst.
seb ist offline   Mit Zitat antworten
Alt 15.09.2005, 22:22   #8
TP-Junior
 
Registriert seit: Sep 2005
tower macht alles soweit korrekt
Frag' nicht ;-) Es muss so sein...
tower ist offline   Mit Zitat antworten
Alt 15.09.2005, 22:37   #9
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein
Zitat:
Frag' nicht ;-)
Tja...dann wirst Du dein Problem wohl allein lösen müssen. Wir können dir schlecht helfen, wenn Du uns nicht verrätst, worum es eigentlich geht.
seb ist offline   Mit Zitat antworten
Alt 16.09.2005, 00:11   #10
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
@tower - da ich selbst Musiker bin, kann ich mir schon denken was Du vorhast.
Aber warum stellst Du nicht Deinen Ansatz mit in Frage ? Wenn Du eine galante Technik wünscht mit "Familen" von Instrumenten, aus denen sich die einzelnen Kindelemente ableiten lassen, so entspricht das ja dem normalen Vererbungsgesetz von Klassen.
Also zeig doch mal auf, was Du vorhast und lass uns darüber reflektieren - vielleicht geht Dir ja ein Licht auf oder uns fällt ein viel einfacherer Weg ein - aber dazu musst Du schon begründen, warum ein bestimmter Weg "gegangen werden muss"

Ich glaub kaum, das Du irgendwo auf fruchtbarere Ohren triffst als hier, darum kann ich Dir nur raten, das zu nutzen
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 16.09.2005, 11:04   #11
TP-Junior
 
Registriert seit: Sep 2005
tower macht alles soweit korrekt
'Frag nicht' war doch mit einem Smiley versehen...

Ich weiss, dass ich das Problem mit einer instanzierten Geige und einer normalen, vererbbaren Klassenmethode umgehen kann, aber das möchte ich ja gerade vermeiden.
Im wirklichen Leben ist Instrument eine recht kostspielige Klasse mit allerlei Funktionen und wer_bin_ich() ist eine finder-Methode, die mir kein, ein oder viele Geigen-(Orgel- oder sonstwas)-Objekte zurückgibt. Ich möchte das Instanzieren einfach vermeiden, da ich noch nicht weiss, ob ich überhaupt ein Objekt zurückbekomme. Um zu erkennen, nach welchem Instrument ich eigentlich suche, will ich den Weg über Geige::finde(...) gehen. Dazu muss finde() ja wissen, dass ich eben nach einer Geige und nicht nach der Mutter Instrument suche, die entsprechenden Geige-Dateien öffnen etc.. Falls sich keine Geige findet, habe ich auch die große Mutter Instrument nicht instanziert, und das soll so sein. Wie gesagt: Schon möglich, dass das so überhaupt gar nicht geht...
tower ist offline   Mit Zitat antworten
Alt 16.09.2005, 19:15   #12
giv
TP-Senior
 
Benutzerbild von giv
 
Registriert seit: Jan 2003
Ort: Darmstadt
giv macht sich hier sehr viel Mühe
...ja
__________________
forenregeln - 3.d) ... richtige groß- und kleinschreibung benutzen ...
giv ist offline   Mit Zitat antworten
Alt 17.09.2005, 13:06   #13
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
ohne, dass ich mir den thread jetzt komplett durchgelesen habe ... der versuch einer loesung
PHP-Code:
 class Instrument 
 
// ... 
    
static function wer_bin_ich($name) { 
        echo 
$name// hab die eckige klammer mal rausgenommen
    

 } 

 class 
Geige extends Instrument {} 
 class 
Wollharfe extends Instrument {} 

 
$instrument1 = new Geige();
 
$instrument1->wer_bin_ich('Geige'); // gibt 'Geige' aus
 
$instrument2 = new Wollharfe();
 
$instrument2->wer_bin_ich('Wollharfe'); // gibt 'Wollharfe' aus 
was spricht dagegen?

gruss
hardy
theo ist offline   Mit Zitat antworten
Alt 17.09.2005, 13:21   #14
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein
Zitat:
was spricht dagegen?
Er will alles statisch haben und keine Objekte instanzieren.
seb ist offline   Mit Zitat antworten
Alt 17.09.2005, 13:50   #15
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
gibt es dann nicht ne moeglichkeit, im construct der kindklassen den jeweiligen namen festzulegen und dann in der methode der elternklasse ausgeben zu lassen?
mal nur so ins blaue geraten (und mit dem wissen, dass es nicht funktionieren kann)
PHP-Code:
 class Instrument {    
 var 
$name;
    static function 
wer_bin_ich() {
        echo 
$this->name;
    } 
 } 

 class 
Geige extends Instrument {
   function 
__construct() {
     
$this->name "Geige";
   }
 } 
 class 
Wollharfe extends Instrument {
   function 
__construct() {     
     
$this->name "Wollharfe";
   }
 } 

 
$instrument1 Geige::wer_bin_ich(); 
aber vielleicht hilft es, meinen gedankengang zu verstehen.

hardy
theo ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
OO: Vererbung / Nichtvererbung von Klassennamen OO: Vererbung / Nichtvererbung von Klassennamen
« CSV-Datei in XML-Datei konvertieren | mit PHP Diagrame erstellen »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67