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 04-07-2012, 16:42
jack88
 Registrierter Benutzer
Links : Onlinestatus : jack88 ist offline
Registriert seit: Mar 2012
Beiträge: 24
jack88 befindet sich auf einem aufstrebenden Ast
Standard Klassennamen einer Child-Klasse abfragen

Hallo,

gibt es eigentlich eine Möglichkeit mit einer statischen Methode in der Parent-Klasse den Klassennamen der Child-Klasse zu ermitteln?

Also z.B.:


PHP-Code:
class {
    public static function 
getClassName() {
        echo 
__CLASS__;
    }
}

class 
extends {
    
}

A::getClassName()
B::getClassName(); 
A - Ausgabe: A
B - Ausgabe: A (hier bräuchte ich B)

Vielen Dank im Voraus
jack
Mit Zitat antworten
  #2 (permalink)  
Alt 04-07-2012, 17:20
Malachite
 Registrierter Benutzer
Links : Onlinestatus : Malachite ist offline
Registriert seit: Aug 2011
Beiträge: 57
Malachite befindet sich auf einem aufstrebenden Ast
Standard

static dient nicht nur zur Definietion von statischen Methoden:
PHP-Code:
class 
    public static function 
getClassName() { 
        echo static; 
    } 


class 
extends {} 
self und __CLASS__ werden zur Kompilierzeit definiert, sind also immer der Name der Klasse, in denen sie definiert werden. static hingegen wird zur Laufzeit definiert.
Mit Zitat antworten
  #3 (permalink)  
Alt 04-07-2012, 17:36
jack88
 Registrierter Benutzer
Links : Onlinestatus : jack88 ist offline
Registriert seit: Mar 2012
Beiträge: 24
jack88 befindet sich auf einem aufstrebenden Ast
Standard

danke erstmal für die schnelle Antwort.

Leider erhalte ich bei deinem Code die folgende Fehlermeldung:

" Parse error: syntax error, unexpected ';', expecting T_PAAMAYIM_NEKUDOTAYIM "

gruß
jack
Mit Zitat antworten
  #4 (permalink)  
Alt 04-07-2012, 18:14
Malachite
 Registrierter Benutzer
Links : Onlinestatus : Malachite ist offline
Registriert seit: Aug 2011
Beiträge: 57
Malachite befindet sich auf einem aufstrebenden Ast
Standard

Hm, ich dachte, static sei eine Konstante, wie self und __CLASS__. Ist leider nicht so, wie ich durch das Manual erfahren habe.
Du kannst mit static also nur Methoden und Eigenschaften aufrufen.

Dieser Code sollte aber funktionieren:

PHP-Code:
class 
    public static function 
getClassName() { 
        echo static::
getName();
    }

    public static function 
getName() {
        return 
__CLASS__;
    }
}

class 
extends {}

B::getClassName() 
Mit Zitat antworten
  #5 (permalink)  
Alt 04-07-2012, 18:20
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

get_class($this) sollte das sein, was du suchst.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #6 (permalink)  
Alt 04-07-2012, 18:23
jack88
 Registrierter Benutzer
Links : Onlinestatus : jack88 ist offline
Registriert seit: Mar 2012
Beiträge: 24
jack88 befindet sich auf einem aufstrebenden Ast
Standard

sorry, aber dein Code liefert ebenfalls die Parent-Klasse "A" zurück.

B::getClassName(); // Ausgabe: "A"

Du hast die Abfrage einfach in eine zusätzliche Methode verlagert, ansonsten hat sich ja nichts geändert?!

gruss
jack
Mit Zitat antworten
  #7 (permalink)  
Alt 04-07-2012, 18:30
jack88
 Registrierter Benutzer
Links : Onlinestatus : jack88 ist offline
Registriert seit: Mar 2012
Beiträge: 24
jack88 befindet sich auf einem aufstrebenden Ast
Standard

@Amica

Nein, get_class($this) kann leider nicht funktionieren. Es ist eine statische Methode, deshalb ist $this nicht vorhanden/definiert.

gruß
jack
Mit Zitat antworten
  #8 (permalink)  
Alt 04-07-2012, 18:33
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Okay, stimmt. Wenn die Klasse aber prinzipiell instanziierbar ist, kannst du get_class trotzdem nutzen:
PHP-Code:
get_class(new static()); 
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #9 (permalink)  
Alt 04-07-2012, 18:57
Malachite
 Registrierter Benutzer
Links : Onlinestatus : Malachite ist offline
Registriert seit: Aug 2011
Beiträge: 57
Malachite befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von jack88 Beitrag anzeigen
sorry, aber dein Code liefert ebenfalls die Parent-Klasse "A" zurück.

B::getClassName(); // Ausgabe: "A"
Stimmt, B::getClassName() muss definiert sein, nicht A::getClassName(). So steht es jedenfalls im Tutorial, ausprobiert habe ich das jetzt nicht, weil ich gerade keinen Interpreter zur Hand habe.
Mit Zitat antworten
  #10 (permalink)  
Alt 04-07-2012, 19:44
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

1. Wozu braucht man den Parent Class Name?
2. geht das nicht mit get_called_class() und Reflection?
__________________
Wir werden alle sterben
Mit Zitat antworten
  #11 (permalink)  
Alt 04-07-2012, 21:19
jack88
 Registrierter Benutzer
Links : Onlinestatus : jack88 ist offline
Registriert seit: Mar 2012
Beiträge: 24
jack88 befindet sich auf einem aufstrebenden Ast
Standard

@Amica
hej, so einen Konstrukt "new static()" sehe ich ehrlich gesagt zum ersten Mal, verstehe es auch nicht ganz, aber.... es funktioniert :-) Ist schon ziemlich tricky. Suboptimal finde ich allerdings, daß man jedes Mal quasi eine Instanz zum wegwerfen erzeugen muss nur um den Klassennamen herauszubekommen.

@combie
get_called_class() - DAS IST ES!
Zitat:
Wozu braucht man den Parent Class Name?
Nicht den Parent - sondern den Child, also den Namen der abgeleiteten Klasse.
Ich benötige den Namen als Parameter um Models und DataMapper dynamisch zu erstellen. Dabei brauch ich den Namen der jeweiligen Modelklasse und nicht den der generischen Parentklasse. Wenn ich mit dem "Kram" hoffentlich irgendwann fertig bin, werde ich es mal hier komplett posten.

Gruß und nochmals super vielen Dank für die gigaschnelle Hilfe!
jack
Mit Zitat antworten
  #12 (permalink)  
Alt 04-07-2012, 22:19
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Elternklassen sollten nichts über ihre Kinder wissen(müssen).
Ein Design Fehler?
Deswegen vermute ich, dass du es mit den static Methoden übertreibst.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #13 (permalink)  
Alt 04-07-2012, 22:35
jack88
 Registrierter Benutzer
Links : Onlinestatus : jack88 ist offline
Registriert seit: Mar 2012
Beiträge: 24
jack88 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Ein Design Fehler?
Vielleicht, will ich gar nicht ausschließen. Wie gesagt, zurzeit bin ich noch am basteln ;-)
Bis jetzt habe ich allerdings nur eine statische Methode und das nur, weil ich den Konstruktor umgehen muss um das erzeugte Objekt direkt einem übergeordneten "Manager-Objekt" zu übergeben. Mal schauen was dabei herauskommt ;-)

Geändert von jack88 (04-07-2012 um 22:49 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Klassennamen aus einer abgeleiteten statischen Klasse abfragen=? pekka PHP Developer Forum 11 07-11-2008 08:46
Klasse: POP3 abfragen Ascharan PHP Developer Forum 10 04-12-2007 23:32
[OOP] Klasse in einer anderen Klasse verwenden Mra PHP Developer Forum 12 18-05-2007 21:46
[OOP] In einer Klasse eine andere Klasse verwenden? JamieWolf PHP Developer Forum 34 26-08-2004 16:20

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 14:41 Uhr.