Antworten auf deine Fragen:
Neues Thema erstellen

PHP Autoload & Namespaces

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:

  • 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
Anschließend das Problem-Szenario:

  • 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:

Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.867
Beiträge
1.539.636
Mitglieder
67.860
Neuestes Mitglied
Hawkness
Oben