Ankündigung

Einklappen
Keine Ankündigung bisher.

Planung PHP 5.3 Projekt

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Planung PHP 5.3 Projekt

    Hallo Community,

    dieses Thema ist einerseits zum verstehen und andererseits zum Lösen meines Problems gedacht.
    Mit PHP 5.3 wurden Namespaces eingeführt - wie natürlich jeder weis. Das Problem dabei gilt allerdings meiner Bibliothek. Hierfür stelle ich einmal kurz die Ordnerstruktur vor:

    app/
    lib/
    res/
    pub/
    Alle Ordner dienen der Applikation und werden durch /pub/index.php aufgebaut. Durch eine .htaccess wird ähnlich wie bei Zend jeder Request auf die index.php gesteuert.

    Jetzt sollte natürlich die Bibliothek, die sich um die Applikation kümmert und der Bibliothek, die sich um die Businesslogik kümmert getrennt werden. Das ganze ist derzeit so aufgebaut:

    lib/TofFw
    lib/My
    Im Folder TofFw, werden die Applikationsdateien abgelegt. Im anderen die Businesslogik Dateien.

    Natürlich haben beide eigene Namensräume - so erhält bspw. TofFw den Namensraum TofFw und My natürlich selbsterklärenderweise My.

    Grundsätzlich möchte ich also mehrere Bibliotheken wie bei den alten Projekten eben auch (< PHP 5.3). Das ganze ist sogesehen durch die Autoload-Methoden kein Problem (so dachte ich zumindest). Jetzt allerdings nach ein paar praktischen Anwendungen kommt folgendes Problem:

    Natürlich möchte ich, wenn ich schon Namensräume verwende auch keine ewige Klassennamen mit den direkten Namensräumen angeben. Das bedeutet, dass ich am Anfang der Klasse mit use arbeite. Also bspw.:

    PHP-Code:
    use TofFw\X;
    use 
    TofFw\A;

    $a = new A();
    $x = new X(); 
    Grundsätzlich scheint es hier kein Problem zu geben, da beide Klassen im selben Namensraum liegen und der Autoloader folgende Daten bekommen würde:

    A
    X
    Hier kann ich natürlich einfach die jeweiligen Dateien includieren. Das Problem gibt es allerdings im folgenden Fall:

    PHP-Code:
    use TofFw\X;
    use 
    TofFw\App\A;

    $a = new A();
    $x = new X(); 
    Jetzt erhält der Autoloader A und X, da beide Namespaces natürlich direkt angegeben werden.

    Sogesehen wäre das ganze kein Problem - denn dafür war ja laut dem PHP Manual die Globale Konstante __NAMESPACE__ vorgesehen. Jetzt allerdings folgendes Problem: Namespace enthält immer den letzten use. Das heißt also in meinem Fall TofFw\App.

    Da aber X nun nicht im Namensraum TofFw\App liegt, kann ich nicht der einfacher halt halber \ durch / ersetzten und die Datei laden.

    Das Problem ist offensichtlich: Gibt es eine Lösung, die meinem Problem weiterhilft oder liege ich mit meiner Anwendung von Namespace komplett Falsch.

    Aber wenn ich das ganze richtig verstehe wäre es so der beste Weg mehrere Bibliotheken inkl. Namensräume zu benutzen...
    true||false - www.trueorfalse.de - Rund um Software Entwicklung

  • #2
    Hi,

    ich habe den Post nun 2x gelesen und verstehe nich ganz, wo dein Problem liegt. Du kannst du Namespaces in beliebiger Tiefe (siehe PHP: Declaring sub-namespaces - Manual) definieren und entsprechend verwenden. Deine Applikation wird natürlicherweise auch mehrere Hierarchien von Namespaces haben (z.B. für die drei Schichten einer Anwendung).
    Viele Grüße,
    Dr.E.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1. Think about software design [B]before[/B] you start to write code!
    2. Discuss and review it together with [B]experts[/B]!
    3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
    4. Write [I][B]clean and reusable[/B][/I] software only!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Kommentar

    Lädt...
    X