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, 14: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, 14: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, 15: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, 15: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, 16: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, 17: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, 18: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, 20: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 20:55 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 14-09-2006, 20: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, 21: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 21: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

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

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