Portal > Foren > PHP > PHP-Programmierung > Classen dynamisch laden
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 10.07.2006, 16:38 Nach oben    #1
Neuer Benutzer
 
Registriert seit: 08.07.2006
Beiträge: 7
Standard Classen dynamisch laden

Hallo,

im Zuge der Entwicklung einiger auf PHP5/OOP aufsetztenden Projekte, stellt sich mir die Frage, wie ich Klassen dynamisch nachladen kann, sollten diese benötigt werden.

Theoretisch gibt es mehrere Lösungswege, PHP anzuweisen eine Klasse nachzuladen (bzw. allgemein zu laden). Meine Projekte besitzten eine environment.inc.php die den gesammten "System Core" enthält, sprich alle Dateien (z.B.: config.inc.php, functions.inc.php etc) als auch diverse Klassen (z.B.: class.objects.php, class.mysql.php, class.db-exception.php etc).

Nun habe ich überlegt, in wie fern es machbar wäre, dass man einfach ein Objekt erstellt, obwohl die dazu gehörige Klasse noch nicht geladen (includiert) ist.

PHP-Code:
<?php
require_once('class.abc.php');

$abc = new ABC;
$def = new DEF;
?>
Die Klasse "DEF" wurde an dieser Stelle noch nicht includiert, jedoch wird diese für das erstellen des Objekts benötigt. Gibt es eine Möglichkeit an dieser Stelle die Klasse "DEF" nachzuladen (also ohne explizit zu sagen, dass ich die Klasse haben möchte)? Workarounds, u.a. mit class_exists(), kenne ich genug.

Ich bin für jeden Denkansatz dankbar

Mit freundlichen Grüßen
dtdesign
dtdesign ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.07.2006, 16:41 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.512
Standard

Ich denke, dass du die __autoload-Funktion suchst.

Btw. sorry, wenn das klugscheißerisch wirkt, aber auch im Deutschen heißt es Klasse. Mit "K" und nicht mit "C".
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.07.2006, 16:48 Nach oben    #3
Neuer Benutzer
 
Registriert seit: 08.07.2006
Beiträge: 7
Standard

Danke, die __autoload() Funktion kannte ich innerhalb von Klassen, aber dass es die auch als globale Funktion gibt, war mir nicht bekannt.

PS: Im Rest des Posts steht ja immer Klasse, hätte ich mit WinLogo gespielt, wäre mir das wahrscheinlich nicht passiert

Gruß
dtdesign

Edit: Für die nachkommenden, hier der Link zu einer genauen Erklärung aus meinem Lieblingsbuch (liegt immer neben meiner Tastatur ^^ http://www.professionelle-softwareen....autoload.html ... Irgendwie beschäment, dass ich das Teilkapitel dort überlesen/nicht richtig gelesen habe ...

Geändert von dtdesign (10.07.2006 um 16:51 Uhr)
dtdesign ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.07.2006, 16:50 Nach oben    #4
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.512
Standard

__autoload() existiert NUR als globale Funktion! Es ist keine Methode!
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.07.2006, 17:15 Nach oben    #5
Neuer Benutzer
 
Registriert seit: 08.07.2006
Beiträge: 7
Standard

Das hab ich bei meinen Experimentierversuchen inzwischen auch gemerkt, momentan lese ich mich durch Google, wie ich es bewerkstelligen kann, zuverlässig Exceptions abzufangen...

Gruß
dtdesign
dtdesign ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.07.2006, 17:17 Nach oben    #6
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.512
Standard

Problem gelöst?
Das mit den Exceptions passt ja hier nicht rein.

Erstell einen neuen Thread, wenn du eine oder mehrere Fragen dazu hast.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.07.2006, 17:21 Nach oben    #7
Neuer Benutzer
 
Registriert seit: 08.07.2006
Beiträge: 7
Standard

Kurz zu den Exceptions, hab mich gerade durch die "Bug-Reports" von PHP gelesen, __autoload ist "the last resort for the engine if it is looking for a class. If it can not be found it is seen as a fatal error (ie \"class not found\") and the script is aborted. This also happens when you throw an exception to signal that the class could not be loaded."

Naja, ich habs das jetzt anderweitig gelöst.

$thread = new Thread('3993');
$thread->setStatus('solved');

Gruß
dtdesign
dtdesign ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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 sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Tomcat 5.5] Eigener Filter schuld am doppelten Laden der Seite? WarrenFaith Tools, Server, Betriebssysteme 2 18.04.2007 21:29
Klasse laden per Dateiname (!=Klassenname) Sayang Allgemeine Java-Programmierung 5 01.03.2006 11:35
Performanceeinbusen beim Laden von Klassen? Gottzilla Allgemeine Java-Programmierung 4 15.08.2005 02:08
Bild seperat laden und anzeigen phate Desktop-Applikationen und Grafik 0 31.05.2005 10:44
Bilder laden ????? mladdi Allgemeine Java-Programmierung 2 25.11.2004 11:35


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:26 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45