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 17-02-2007, 21:08
stefanwie
 Newbie
Links : Onlinestatus : stefanwie ist offline
Registriert seit: Dec 2004
Beiträge: 42
stefanwie ist zur Zeit noch ein unbeschriebenes Blatt
Standard Lösung für __autoload (Interzeptormethode)

Hi Profis!

Ich habe ein Problem, dass ich nicht lösen kann.
Ich hab schon viel gegoogelt und viel in Foren gelesen, aber eine saubere Lösung hab ich nicht wirklich gefunden.

Also es geht um folgendes:

Mit der Interzeptormethode: __autoload
wird eine Klasse automatisch geladen.
Soweit so gut.

Ich suche jetzt eine Lösung um Klassen automatisch zu laden, die nicht in einem Ordner liegen d.h. in Unterordner.

Beispiel: libs/Debugger/DebuggerComposite.php

Hat jemand eine passende Lösung für mich?

Die Lösung mit Ordner + Unterordner auslesen und dann überprüfen ob die Datei bzw. Klasse existiert gefällt mir nicht, da bei einem großem Projekt die Performance, denke ich, darunter leiden wird.

Vielen Dank und liebe Grüße,
Stefan
Mit Zitat antworten
  #2 (permalink)  
Alt 17-02-2007, 21:18
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

eine möglichkeit wäre folgendes:

klassenname: Debugger_Composite

PHP-Code:
__autoload $class ) {

include ( 
str_replace '_''/'$class ) );


die datei wird dann im pfad libs/Debugger/Composite.php gesucht

wobei ich persöhnlich finde das man zwei ordner gut prüfen kann:

PHP-Code:
 if ( file_exists 'Debugger/' $class ) {
include ...
} elseif ( 
file_exists 'Parse/' $class ) {
include ...
} else {
include ...

bei zuvielen ordner sollte man seine dateistruktur überdenken
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #3 (permalink)  
Alt 17-02-2007, 21:28
stefanwie
 Newbie
Links : Onlinestatus : stefanwie ist offline
Registriert seit: Dec 2004
Beiträge: 42
stefanwie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo tontechniker!

Erstmal vielen Dank für deine Antwort!

Wenn es nur zwei Ordner zu überprüfen wären, wäre es kein Problem, ich spreche aber von einer Klassenhierachie von 20 Unterordner + Klassen.

Die Klassen sind zum Beispiel so Untergebracht:
Ordner:
XML
DB
CACHE
FILE
DEBUG
EVENTLOG
.....

Vielleicht weiß noch jemand eine andere Lösung?

gruß, stefan
Mit Zitat antworten
  #4 (permalink)  
Alt 17-02-2007, 21:30
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von stefanwie
Vielleicht weiß noch jemand eine andere Lösung?
was hast du denn gegen diese lösung? im pear-projekt ist es zumindest auch so umgesetzt.

alternativ könntest du dir ein array definieren, das die klassennamen und pfade enthält - muss dann allerdings manuell gepflegt werden.
Mit Zitat antworten
  #5 (permalink)  
Alt 17-02-2007, 21:33
stefanwie
 Newbie
Links : Onlinestatus : stefanwie ist offline
Registriert seit: Dec 2004
Beiträge: 42
stefanwie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo 3DMax!

Die Lösung mit einem vordefinieren Array ist mir auch schon in den Sinn gekommen, ich mach mir nochmal einen Kopf und poste meine Lösung, sobald ich denn eine gefunden habe


Gruß, Stefan
Mit Zitat antworten
  #6 (permalink)  
Alt 17-02-2007, 21:34
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

QUOTE]Vielleicht weiß noch jemand eine andere Lösung?[/QUOTE]
Zitat:
klassenname: Debugger_Composite

PHP:
__autoload ( $class ) {

include ( str_replace ( '_', '/', $class ) );

}

die datei wird dann im pfad libs/Debugger/Composite.php gesucht
hast du das gelesen?
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #7 (permalink)  
Alt 17-02-2007, 21:37
stefanwie
 Newbie
Links : Onlinestatus : stefanwie ist offline
Registriert seit: Dec 2004
Beiträge: 42
stefanwie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
hast du das gelesen?
natürlich hab ich das gelesen, allerdings arbeite ich mit einem Framework, ich kann dieses Framework nicht auf deine Methode umschreiben
Es sind zu viele Klassen die ineinander verzweigt sind.


Gruß, Stefan
Mit Zitat antworten
  #8 (permalink)  
Alt 17-02-2007, 21:38
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

achso, zu dem array fällt mir noch ein, das man das noch automatisieren könnte. ein script, das bei bedarf alle ordner ausliest, und dann das array serialisiert.
Mit Zitat antworten
  #9 (permalink)  
Alt 17-02-2007, 21:42
closure
 Master
Links : Onlinestatus : closure ist offline
Registriert seit: Mar 2006
Beiträge: 796
closure ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von stefanwie
[B]natürlich hab ich das gelesen, allerdings arbeite ich mit einem Framework, ich kann dieses Framework nicht auf deine Methode umschreiben
Es sind zu viele Klassen die ineinander verzweigt sind.
Ehrlich gesagt verstehe ich den einwand nicht. Wenn das framework
ebenfalls klassen automatisch läd, dann halt dich an die
konventionen des frameworks und schau wie das vom fw gelöst
wurde. Dann baust du deine klassen so dass sie konform gehen.
Wenn nicht, um so besser, dann kann es dir
egal sein und du machst es wie du es willst.

greets
__________________
(((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")
Mit Zitat antworten
  #10 (permalink)  
Alt 17-02-2007, 21:50
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
natürlich hab ich das gelesen, allerdings arbeite ich mit einem Framework, ich kann dieses Framework nicht auf deine Methode umschreiben
dann schau dir die klassen des frameworks genau an und überlege wie man sie trenne kann ...

beispiel "libs/Debugger/DebuggerComposite.php" - trenne halt nach großbuchstaben

die lösung mit dem array wäre im zweifelsfall auch nicht schlecht ... die ordner des frameworks ändern sich ja nicht, für deine eigenen überlegst du dir was
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #11 (permalink)  
Alt 17-02-2007, 22:08
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Man könnte ja auch einfach vor dem include im autoload include_path entsprechend konfigurieren - wenn es einem nichts ausmacht, dass das Script dann selber erst mal auf die Suche gehen muss, wo die Klassen nun wirklich liegen.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
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

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

jqPlot jQuery Plotting Plugin ansehen jqPlot jQuery Plotting Plugin

jqPlot ist ein plotting und charting plugin für das jQuery Javascript framework

06.11.2019 Berni | Kategorie: AJAX/ Framework
WYSIWYG Editor

WYSIWYG Editor zum Einbinden in PHP Scripte.

21.10.2019 Stephan_1972 | Kategorie: PHP/ WYSIWYG
Modelmanager

Der Modelmanager ist ein Webtool für Fotografen, kann als komplette Homepage oder als Webtool installiert werden.

10.10.2019 Stephan_1972 | Kategorie: PHP/ Bilder
 Alle PHP Scripte anzeigen

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