Johannes3: include_path und __autoload gemeinsam nutzen

Beitrag lesen

Hi,

ich habe nicht immer Zugriff auf die php.ini, um alle Pfade für Klassen einzutragen. Jedes Mal um die Erweiterung des include_path betteln will ich nicht, zudem wäre das auch gar nicht sinnvoll, weil es sehr, sehr viele Projekte gibt und der include_path bald nicht mehr überschaubar wäre. Deswegen habe ich mir anfangs mit __autoload beholfen, das nacheinander (je nach Projekt auch unterschiedliche) Verzeichnisse auf Existenz einer Klasse untersucht. Das ist nett, weil es includes in den Skripten spart, die Klassen stehen einfach zur Verfügung.

Nun möchte ich aber zum einen Klassen aus PEAR benutzen, zum anderen während der Entwicklung gemeinsam benutzte Verzeichnisse über den include_path nutzen. Manche Klassen in PEAR - abgeleitete - nutzen selbst includes, und zwar relative bzw. gar nicht näher bestimmte, weil sie auf den include_path vertrauen. Dummerweise habe ich (noch) keinen eigenen Entwicklungshost, d .h., Entwicklungsumgebung und Produktivumgebung sind nur unterschiedliche Verzeichnisse, allerdings besteht die Produktivumgebung wiederum aus mehreren vhosts (einen teilen sich eine Produktivumgebung und die Entwicklungsumgebung).

So, wenn ich das richtig sehe, wird ein include 'irgendwas' (das aus Verzeichnis a, welches im include_path eingetragen ist); new irgendwas nicht irgendwas instantiieren, sondern __autoload aufrufen, was natürlich in b, c oder d irgendwas nicht findet, weil es ja in a ist. Also muß ich selbst in __autoload nach irgendwas in a suchen, und das möchte ich nicht. Es wäre mir recht, wenn das include 'irgendwas' aus a; new irgendwas erkennt bzw. zuerst den include_path durchgeht, daß die Klasse geladen ist bzw. aus a im inc_path geladen werden soll und nicht __autoload aufruft. Erst wenn irgendwas nicht irgendwo in den Pfaden des inc_path gefunden wird, soll __autoload zum Zug kommen, daß dann erkenn, daß irgendwas_anderes in b oder c liegt und es von dort aus includet werden muß.

Hoffe, ist jetzt so etwas klarer geworden, weiß ich meine.