Dude
Hi,
bin auf ein Problem gestoßen, worüber ich gerne sprechen möchte da mir momentan keine Lösung einfällt.
Ich beschreibe erst einmal das normale Szenario und anschließend das Problem-Szenario:
bin auf ein Problem gestoßen, worüber ich gerne sprechen möchte da mir momentan keine Lösung einfällt.
Ich beschreibe erst einmal das normale Szenario und anschließend das Problem-Szenario:
- Man stelle sich ein Script vor das während des Ablaufs auf eine (noch) nicht existierende Klasse zugreifen will. Dort greift die Funktion __autoload() ein. Sie bindet die Datei ein [Klasse].php sofern vorhanden. Diese Datei beinhaltet widerum die gewünschte Klasse. Das Problem ist gelöst da die Klasse zwar am Anfang der Laufzeit des Scripts nicht vorhanden war, doch auf Wunsch eingebunden wurde.
Code:
Code:<?php function __autoload($class){ // Hier wird eine Datei neu geladen, // sofern eine Klasse nicht gefunden wurde // Schema: [Klasse].php require($class.'.php'); } echo "I´m the index.php in the root dir and trying to access a file in another namespace: xyz<br>"; $xyz = new XYZ(); // diese Klasse befindet sich in der Datei XYZ.php welche nur __autoload eingebunden wird
- Man stelle sich ein Script vor was eine Klasse "xyz" verwendet. Möglich ist jedoch auch, dass es eine zweite Klasse xyz gibt, die jedoch zur Laufzeit noch nicht eingebunden wurde (so wie im obigen Beispiel). Nun, die Funktion __autoload() wird ja beim Aufruf der Klasse nicht angesprochen, da bereits eine Klasse xyz existiert. Das könnte aber auch die falsche gewünschte Klasse sein (also nicht die Klasse die vom Script ist, sondern die Klasse die durch die Datei XYZ.php noch geladen werden muss). So lauten meine Fragen:
- Woher kann ich wissen, ob die Klasse xyz gewünscht ist die bereits eingebunden wurde oder die Klasse xyz aus Datei xyz.php gewünscht ist, welche noch eingebunden werden müsste?
- Wie das Ganze mit Namespaces lösen?
Code:
<?php
class xyz{
function __construct(){
}
}
function __autoload($class){
// Hier wird eine Datei neu geladen,
// sofern eine Klasse nicht gefunden wurde
// Schema: [Klasse].php
require($class.'.php');
}
echo "I´m the index.php in the root dir and trying to access a file in another namespace: xyz<br>";
// diese Klasse befindet sich in der Datei XYZ.php welche nur __autoload eingebunden wird
// ABER sie existiert bereits durch obige initialisierung. wie also das lösen, sofern trotzdem
// die klasse in Datei XYZ.php gewünscht?
$xyz = new XYZ();
?>
Zuletzt bearbeitet: