php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.11.2005, 13:48   #1 (permalink)
Erfahrener Benutzer
 
Registriert seit: 02.03.2005
Beiträge: 306
DerDesian
Standard Klasenname einer nicht instanziierten Klasse

Hi,

das kleine
PHP-Code:
$className get_class($this); 
ist ja kein Kunststück.
Wie bekommt man den Klassennamen raus, wenn main eine Funktion statisch aufruft? Gibt ja kein Objekt, das ich der Funktion get_class() übergeben könnte.

Hintergrund:
DatenObjekte erben von Einer Klasse, die bereits etliche Funktionalitäten zur ferfügung stellt.
Den einfachen Datensatz zu bekommen ist nicht so die Hürde, weil man eine Statische Variable "$dbTableName = 'tabelle';" in jeder abgeleiteten Klasse haben kann.
Auf die gleiche Weise könnte ich auch den KlassenNamen noch einmal in eine Variable packen um dann über ein Switch eine zu instanziirende Klasse auswählen kann.
Das würde jedoch bedeuten, dass ich für jede Neue Klasse auch die Elternklasse wieder anpassen muß.
=> eben die neue Option an den Swich hängen.
Deshalb such ich nach einer Möglichkeit den Klassennamen zu bekommen, bevor die Klasse instanziiert ist.

Gruß
Der Desian
__________________
Wenn dich was ankotzt, machs besser.
DerDesian ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 29.11.2005, 14:17   #2 (permalink)
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Verstehe ich nicht ganz, wenn du die statische Klasse aufrufst, kennst du doch den Namen?
Zergling-new ist offline  
Alt 29.11.2005, 15:06   #3 (permalink)
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard Re: Klasenname einer nicht instanziierten Klasse

Zitat:
Zitat von DerDesian
Deshalb such ich nach einer Möglichkeit den Klassennamen zu bekommen, bevor die Klasse instanziiert ist.
Das ist sogut wie unmöglich wenn du keinen Anhaltspunkt hast ... wonach entcheidet sich das denn welche Klasse instanziert wird?
HStev ist offline  
Alt 29.11.2005, 15:17   #4 (permalink)
Erfahrener Benutzer
 
Registriert seit: 02.03.2005
Beiträge: 306
DerDesian
Standard

Hi,

hab einen Ansatzpunkt. Es ist der jewailige Erbe, von dem ich die geerbte Funktion aufrufen will.

Ich beschreibs anders
PHP-Code:
class Corpus {
    
#von der wird geerbt
    
    
function getById($db$id) {
        
// die Funktion soll hier implementiert werden
        // und so,  dass ich die Funktion nicht bei jedem neuen Erbe anpassen muß
    
}
}

class 
Truncus extends Corpus {
    
# is der Erbe
    
    
function getById($db$id) {
        
#so ist es bi dato
        
$query "SELECT * FROM truncus WHERE id=".$id;
        
$row = ...
        return new 
Truncus($row);
    }
}

class 
Capites extends Corpus {
    
# is der Erbe
    
    
function getById($db$id) {
        
#so ist es bi dato
        
$query "SELECT * FROM capites WHERE id=".$id;
        
$row = ...
        return new 
Capites($row);

    }

Ich will einfach eine Reihe von Funktionen abstrahiren
(zB die getById()), damit ich sie nicht in jeder Datenklasse neu implementieren muß.

Gruß
Der Desian
__________________
Wenn dich was ankotzt, machs besser.
DerDesian ist offline  
Alt 29.11.2005, 15:24   #5 (permalink)
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Steht dir PHP5 zur verfügung?

Dann wären abstrakte Klassen genau das richtige für dich wenn ich dich richtig verstehe.
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline  
Alt 29.11.2005, 15:26   #6 (permalink)
Gast
 
Beiträge: n/a
Standard

Dann erstelle Dir eine factory.
Also nicht mehr die Konstruktion über Klassenname::getIrgendwas(1,2), sondern Factory::getIrgendwas('Klassenname', 1, 2) bzw factory->getIrgendwas('Klassenname', 1, 2)
 
Alt 30.11.2005, 12:10   #7 (permalink)
Erfahrener Benutzer
 
Registriert seit: 02.03.2005
Beiträge: 306
DerDesian
Standard

Das ich so blind duch das Handbuch gestolpert bin... *kopfschüttel*
So einfach kann es sein:
PHP-Code:
class {
  function 
tuWas() {
    echo 
__CLASS__;
  }
}
class 
extends {
}

B::tuWas(); 
Gruß
Der Desian
__________________
Wenn dich was ankotzt, machs besser.
DerDesian ist offline  
Alt 30.11.2005, 12:45   #8 (permalink)
Gast
 
Beiträge: n/a
Standard

PHP-Code:
<?php
class {
  function 
tuWas() {
    echo 
__CLASS__;
  }
}
class 
extends {
}

B::tuWas();
?>
Zitat:
A
Das ist nicht das, was Du laut Fragestellung haben wolltest.
 
Alt 30.11.2005, 13:02   #9 (permalink)
Erfahrener Benutzer
 
Registriert seit: 02.03.2005
Beiträge: 306
DerDesian
Standard

Nicht?
Zitat:
Zitat von DerDesian
Wie bekommt man den Klassennamen raus, wenn main eine Funktion statisch aufruft?
Soweit ich weiß bedeutet
'statisch' ~ 'nicht instanziiert'
Und ein statischer Aufruf einer Funktion hat normalerweise die Syntax:
Klasse::funktion();

Ich werde mich bemühen mein Anliegen das nächste mal deutlicher zu formulieren.

Gruß
Der Desian
__________________
Wenn dich was ankotzt, machs besser.
DerDesian ist offline  
Alt 30.11.2005, 13:13   #10 (permalink)
Gast
 
Beiträge: n/a
Standard

Es passt trotzdem nicht zu Deinem Beitrag Verfasst am: 29.11.2005, 15:17.
Auf das Beispiel übertragen, liefert Dir __CLASS__ immer Corpus. Hilft Dir bei Deinem Problem also nicht weiter.
Es sei denn, Du implementierst in jeder Klasse die Funktion getById(), die dann Corpus::getById(__CLASS__) aufruft. Aber das wolltest Du ja eigentlich vermeiden.
 
Sponsor Mitteilung
PHP Code Flüsterer

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

 


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
Variable aus Klasse herausbekommen GSJLink PHP Tipps 2008 7 16.02.2008 22:25
HTML Klasse ecomeback PHP Tipps 2008 6 31.08.2007 22:32
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
MySQL - Klasse: Wie da mysql_close benutzen Igäl PHP Tipps 2006 5 01.10.2006 23:09
Eine Klasse mehrere Dateien sn00py PHP Tipps 2006 6 08.05.2006 11:40
mehr als eine Klasse einbinden Alpha Centauri PHP-Fortgeschrittene 4 13.04.2006 20:56
aus einer funktion auf funktion anderer klasse zugreifen seejay PHP Tipps 2006 3 05.01.2006 10:37
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12
Führerschein für Klasse A+B.. Preis OK??? Off-Topic Diskussionen 20 13.07.2005 18:44
Rückgabewert auf einer Klasse anders als in der Klasse micbur PHP Tipps 2005-2 6 10.06.2005 15:06
Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Klasse holt sich die Klasse PHP-Fortgeschrittene 9 07.10.2004 11:53
[Erledigt] Brauche Hilfe bei meiner ersten Klasse PHP-Fortgeschrittene 9 24.09.2004 17:09
Klassenobjet in anderer Klasse benutzen inu PHP Tipps 2004 6 19.09.2004 10:58
Klasse ändern UniQ PHP Tipps 2004 5 24.08.2004 14:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php name der klasse, php klasse wird nicht instanziiert, php bezeichnung klassen, extend erben __class__, wie bekomme alte klassennamen raus, php __class__ elternklasse, klassen name php, __class__ abgeleitete klasse php, php name klasse, javascript __class__, abgeleitete klasse name php, klasse instanziieren

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2010, 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.