php-resource



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

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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 Thema bewerten
  #1 (permalink)  
Alt 14-09-2006, 15:42
s02
 Registrierter Benutzer
Links : Onlinestatus : s02 ist offline
Registriert seit: Jan 2004
Beiträge: 69
s02 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Name der erweiterten (statischen) Klasse aus Basisklasse auslesen

Hallo,

ich brüte hier nun schon wieder ewig über einem kleinen Problem, und zwar geht es wie im Titel angedeutet darum, den Namen einer statischen Klasse in einer Methode der Basisklasse auszulesen. Bei dynamischen Klassen ist das kein Problem, da kann man get_class einfach mit $this füttern, nur für statische Klassen finde ich einfach keine vernünftige Lösung. Zum besseren Verständniß, so sieht's ungefähr aus:

PHP-Code:
class B
{
    public static function 
ClassName()
    {
    }
}
class 
extends B
{
    public static function 
SomeMethodThatCouldSomethingFunny()
    {
    }

__CLASS__ würde in der Funktion von Klasse B immer nur B ausgeben, und nun weiß ich nicht wirklich weiter. Klasse A soll aufjedenfall aus dem Spiel gehalten werden, denn gerade sowas soll ja durch die Basisklasse überflüssig gemacht werden.

Hätte da irgendjemand einen Tip für mich wie ich an den Klassennamen kommen könnte?

Gruß
Olli
Mit Zitat antworten
  #2 (permalink)  
Alt 14-09-2006, 15:59
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Die ReflectionClass Klasse erlaubt es, Klassen zurückzuentwickeln
public ReflectionClass getParentClass()
aus: http://www.php.net/manual/de/languag...reflection.php
Mit Zitat antworten
  #3 (permalink)  
Alt 14-09-2006, 16:36
s02
 Registrierter Benutzer
Links : Onlinestatus : s02 ist offline
Registriert seit: Jan 2004
Beiträge: 69
s02 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich glaube du hast mich ein wenig misverstanden, ich benötige nicht den Namen der Elternklasse, sondern den der erweiternden Klasse, und da komme ich mit Reflection leider auch nicht weit, also zumindest konnte ich nichts passendes unter den Methoden der ReflectionClass Klasse finden.

Bin noch auf einen Tip mit debug_backtrace gestoßen, aber ab PHP5 funktioniert das wohl nicht mehr, da ist dann auch nur noch die Basisklasse drin.

Gruß
Olli
Mit Zitat antworten
  #4 (permalink)  
Alt 14-09-2006, 16:43
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Stimmt, habe dich wirklich falsch verstanden....

Dann wirst du, wohl oder übel, public static function ClassName() in deiner Class A überschreiben müssen...
Mit Zitat antworten
  #5 (permalink)  
Alt 14-09-2006, 17:47
closure
 Master
Links : Onlinestatus : closure ist offline
Registriert seit: Mar 2006
Beiträge: 796
closure ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

soll das ne art factory werden ? Sieht mir jedenfalls ganz danach aus.

Auch wenns nicht schön ist, aber evtl. könnte dir eval() helfen.
Aber sag mal erstmal ganz genau was du vorhast.


greets
__________________
(((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")
Mit Zitat antworten
  #6 (permalink)  
Alt 14-09-2006, 18:25
s02
 Registrierter Benutzer
Links : Onlinestatus : s02 ist offline
Registriert seit: Jan 2004
Beiträge: 69
s02 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nene, keine Factory, letztendlich soll es nur dafür sorgen das alle Klassen im Framework über eine einheitliche Methode verfügen die den Klassennamen in einem einheitlichen Format zurückgibt, und da bietet sich die Basisklasse halt an.

Gruß
Olli
Mit Zitat antworten
  #7 (permalink)  
Alt 14-09-2006, 19:29
closure
 Master
Links : Onlinestatus : closure ist offline
Registriert seit: Mar 2006
Beiträge: 796
closure ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

Das ist alles ?

warum dann eine statische methode ? Um die aufzurufen braucht man doch den
klassennamen. Also weiss man ihn in dem moment auch.

Du musst das ganze nur als methode der basisklasse bauen.
Ich kann es gerade nicht testen aber folgendes sollte funktionieren.

PHP-Code:
class Parent{
       public function 
class_name(){
               
$cls = new ReflectionClass($this);
               return 
$cls->getName();
       }
}

class 
Child extends Parent{

}


$the_class = new Child();
echo 
$the_class->class_name(); 
Evtl. kann man sogar direkt von ReflectionClass erben, dann hat
man noch gleich ein paar mehr methoden um etwas heraus zu bekommen.

greets
__________________
(((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")
Mit Zitat antworten
  #8 (permalink)  
Alt 14-09-2006, 21:52
s02
 Registrierter Benutzer
Links : Onlinestatus : s02 ist offline
Registriert seit: Jan 2004
Beiträge: 69
s02 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nein, alles ist das nicht, ich habe einfach nur das mal als Beispiel genommen. In der Basisklasse sind noch weitere Funktionen vorhanden die auf den Namen der erweiternden Klasse angewiesen sind, z.B. zum auslesen der Eigenschaften und Methoden, usw.. Sicher könnte man auch get_class_vars(name) Schreiben, aber auch solche Kleinigkeiten soll das Framework überflüssig machen.

Und dann geht es halt auch noch um das Format, da soll hinterher niemand mehr selbst Hand anlegen müssen.

Es ist zwar nicht lebenswichtig, aber ich würd's halt schön finden

Gruß
Olli

Geändert von s02 (14-09-2006 um 21:55 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 14-09-2006, 21:55
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
In der Basisklasse sind noch weitere Funktionen vorhanden die auf den Namen der erweiternden Klasse angewiesen sind
Wo hast du denn OOP gelernt?
Ich würde dieses mal als Designfehler bezeichnen!
Mit Zitat antworten
  #10 (permalink)  
Alt 14-09-2006, 22:39
s02
 Registrierter Benutzer
Links : Onlinestatus : s02 ist offline
Registriert seit: Jan 2004
Beiträge: 69
s02 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nun übertreib das doch nicht so Es ist doch nicht so das die "Hauptaufgaben" der Klasse ausgelagert würden und auf den Namen angewiesen wären, es geht einfach darum diese kleinen, nennen wir sie mal "Helper", die für alle Klassen gleich sein sollen nicht immer wieder neu definieren zu müssen wenn es denn nicht wirklich nötig/gewollt ist, und manche arbeiten nunmal mit dem Klassennamen der erweiternden Klasse...

Gruß
Olli

Geändert von s02 (14-09-2006 um 22:43 Uhr)
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

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:02 Uhr.