AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [php] überprüfe, ob klasse in datei vorhanden
Thema durchsuchen
Ansicht
Themen-Optionen

[php] überprüfe, ob klasse in datei vorhanden

Ein Thema von s.h.a.r.k · begonnen am 20. Mai 2008 · letzter Beitrag vom 22. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

[php] überprüfe, ob klasse in datei vorhanden

  Alt 20. Mai 2008, 11:00
hallo,

ich schreibe mir gerade ein framework in php und scheitere daran, dass ich nicht genau weiß, wie ich das folgende problem angehen soll. und zwar soll mein framework auf einzelnen modulen basieren, welche in einzelnen dateien stecken. in einer solcher modul-datei soll aber nur eine klasse vorkommen, welche eine vordefinierte abstrakte klasse implementieren soll.

kennt ihr möglichkeiten,
... wie man prüfen kann, ob in einer speziellen datei höchstens eine klasse (deren name ich noch nicht kenne) vorhanden ist?
... wie man prüfen kann, wie man diese eine klasse dann auslesen kann?

ich habe irgendwie die befürchtung, dass es darauf hinaus läuft einen eigenen parser dafür zu schreiben, welcher den dateiinhalt analysiert, was allerdings ein wenig arg komplex wäre...

btw: eine idee wäre, die anzahl der vorhandenen klassen vor und nach dem einbinden zu bestimmen (stichwort: get_declared_classes()). aber das finde ich nicht unbedingt die sauberste lösung.

ich hoffe, ihr könnt mir weiterhelfen!

mit freundlichen grüßen
der hai
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#2

Re: [php] überprüfe, ob klasse in datei vorhanden

  Alt 20. Mai 2008, 11:07
Nein. Dem PHP-Interpreter ist es vollkommen egal, WO etwas deklariert ist.
Demnach merkt er sich auch keinerlei Informationen darüber, was in welcher Datei steckt. Du kannst also nicht herausfinden, was (bzw. in Deinem Fall: Wieviel) in einer Datei steckt.

Ist eine PHP-Datei einmal inkludiert, dann ist sie auch interpretiert und deren Inhalt steht dem Programm zur Verfügung bzw. wird direkt ausgeführt.

Das heisst, die einzige Möglichkeit etwas ungeschicktes zu verhindern wäre tatsächlich, die Datei vor dem includieren zu analysieren und erst zu laden, wenn sie den Anforderungen genügt.

Andererseits: Wieso willst Du den Modulen vorschreiben, nur aus einer Klasse zu bestehen? Wenn es Sinn macht, das ein Modul irgendwelche Helferklassen einsetzt, dann solltest Du als Frameworkentwickler den Modulentwickler nicht dazu zwingen, von guten OOP-Stil abzuweichen und alles in eine Klasse zu zwängen, sondern ihm die Freiheit lassen, ggf. mehrere Klassen zu definieren die er dann benutzt.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

Re: [php] überprüfe, ob klasse in datei vorhanden

  Alt 20. Mai 2008, 15:55
darüber habe ich mir auf der fahrt zur uni auch gedanken gemacht und es als wahrlich sinnfrei erachtet nur eine klasse zuzulassen, zumal in der geforderten klasse ja eh eine andere datei mit anderen klassen inkludiert werden können.

nun stellt sich mir aber die frage, wie ich das eben sinnvoll gestalte, da die analyse der datei wahrscheinlich nicht all zu einfach ist, dies aber auch effizient und (am besten immer ) fehlerfrei ablaufen sollte.

ich hoffe du/ihr kannst/könnt mir weiterhelfen!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: [php] überprüfe, ob klasse in datei vorhanden

  Alt 20. Mai 2008, 23:10
Moin,

ich verwende das in meinem Projekt fuer den Database-Layer. Ich hab meine abstrakte Standardklasse (SQLDatabase), die als Basis fuer alle anderen Klassen dient. In einem eigenen Ordner sind dann die ganzen eigenen Datenbank-Klassen drin (z.B. MySQL4Database in mysql4.php), die am Ende alle dieses Snippet beinhalten:
Code:
if (isset($define_dbms))
{
   $available_dbms['mysql4'] = array(
      'file' => 'mysql4.php',
      'classname' => 'MySQL4Database'
   );
}
Die Datei, die die Datenbankverbindung aufmacht, macht dann erstmal das:
Code:
$available_dbms = array();
$files = get_filelist($root_path .'common/includes/classes/db/', '*.php');
$define_dbms = true;
foreach ($files as $db_file)
{
   include($db_file);
}
unset($files);
unset($define_dbms);
get_filelist ist eine eigene Funktion, die mir den Inhalt eines Ordners auflistet. Anschliessend hab ich in $available_dbms alle Datenbankklassen drinstehn, und kann die Datenbankverbindung so aufbauen:
Code:
$db = new $dbclassname(...);
wobei $dbclassname der entsprechende Klassenname ist

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

Re: [php] überprüfe, ob klasse in datei vorhanden

  Alt 20. Mai 2008, 23:17
Zitat von alcaeus:
Code:
$db = new $dbclassname(...);
wobei $dbclassname der entsprechende Klassenname ist
Super, wusste gar nicht, dass das geht, kann ich bei meinem aktuellen Projekt gerade sehr gut gebrauchen.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#6

Re: [php] überprüfe, ob klasse in datei vorhanden

  Alt 21. Mai 2008, 01:18
Wenn du willst kannst du es auch so machen:
Code:
class foobar {
//...
}

$foo = 'bar';
$bar = 'foobar';
$test = new $$foo;
Das kannst du solange machen, bis du nicht mehr weisst wo was drin steht

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#7

Re: [php] überprüfe, ob klasse in datei vorhanden

  Alt 21. Mai 2008, 01:19
Na, so extrem muss das nun auch wieder nicht sein.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#8

Re: [php] überprüfe, ob klasse in datei vorhanden

  Alt 21. Mai 2008, 12:26
@alcaeus: danke für deinen hinweis. gefällt mir recht gut der ansatz. allerdings fehlt mir noch eine vorab-prüfung der klassen. aber das muss ich wohl noch selbst implementieren.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#9

Re: [php] überprüfe, ob klasse in datei vorhanden

  Alt 21. Mai 2008, 12:31
Zitat von s.h.a.r.k:
@alcaeus: danke für deinen hinweis. gefällt mir recht gut der ansatz. allerdings fehlt mir noch eine vorab-prüfung der klassen. aber das muss ich wohl noch selbst implementieren.
Was genau willst du denn machen? Du kannst z.B. mit class_exists() pruefen, ob eine Klasse existiert, oder mit is_subclass_of() bei einem Objekt pruefen, ob es eine bestimmte Klasse als parent hat.

Erklaer mal kurz was du noch pruefen willst?

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#10

Re: [php] überprüfe, ob klasse in datei vorhanden

  Alt 21. Mai 2008, 17:27
Gedacht war folgender, normaler Ablauf beim Aufruf einer Seite (bsp: http://www.test-website.de/news.php):

Code:
1. Kern-Modul wird geladen. Dies sei vorhanden und funktioniert.
2. Kern-Modul schaut in Datenbank, welche User-Module installiert sind und bindet diese ein.
3. Instanziieren der passenden Klasse.
4. Ausführen der User-Module. (bsp: Methode execute(), oder dergleichen)
Wie werden User-Module installiert?
In der Administration werden die vorhandenen User-Module angezeigt, welche sich in einem bestimmten Ordner befinden müssen. An dieser Stelle ist es wichtig eine gute Prüfung zu haben, welche die User-Module auf Korrektheit überprüft. Dabei tritt eben die Fragen auf, ob sich in der Datei eben eine Klasse befindet, welche von der abstrakten Klasse abgeleitet ist, und wenn ja, wie nennt sich diese Klasse. Wenn diese Prüfung durchläuft und der Kern die "main"-Klasse (es kann ja evtl. mehrere geben) ermittelt hat, dann wird von dieser Datei ein Hash-Wert gebildet und diese Informationen landen dann in der Datenbank. Anhand des Hash-Wertes wird dann bei obigen Punkt 2 geprüft, ob sich die Klasse geändert hat. Ebenso wird dann aus der DB der Name der Klasse geladen, worüber dann eine Instanz gebildet werden kann.

Ich will eben vermeiden, dass es zu viele includes gibt.

Ich weiß nicht, ob das ein optimales System ist, da es schon ein paar Ecken gibt, mit denen ich nicht ganz zufrieden bin, aber mir ist bisher nichts besseres eingefalllen
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz