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, 17: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, 18: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, 18: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, 19: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, 19: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, 19: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, 19: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, 19: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, 19: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, 20: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, 22: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, 23: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, 23: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 23: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 09:46
Klasse: POP3 abfragen Ascharan PHP Developer Forum 10 05-12-2007 00:32
[OOP] Klasse in einer anderen Klasse verwenden Mra PHP Developer Forum 12 18-05-2007 22:46
[OOP] In einer Klasse eine andere Klasse verwenden? JamieWolf PHP Developer Forum 34 26-08-2004 17: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

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:50 Uhr.