Require/Include so beschissen?

  • PHP

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Markus Jacobs.

    Require/Include so beschissen?

    Hallo,

    ich möchte mir von euch einmal erklären lassen, wie man sein Projekt am besten strukturiert.
    Momentan habe ich folgende Klassen in PHP:

    Class: Base
    Class: Base -> User
    Class: Base -> User -> LicenseManager
    Class: Base -> User -> LicenseManager -> License

    Nochmal erklärt:
    Klasse Base ist halt die Basisklasse.
    Diese Base-Klasse includiert ein anderes Dokument mit der Klasse User und diese wiederum die Klasse LicenseManager und diese License.
    Klasse License bekommt beim initialisieren das Objekt von LicenseManager und LicenseManager beim initialisieren das Objekt von User und so weiter.

    Die Base Klasse liegt im Ordner Base, dann gibts nen Ordner der nennt sich structures wo sich die User.php und die License.php drin befinden.
    Die LicenseManager Klasse liegt im Ordner Base -> includes.
    Meine Ordnerstruktur ist also folgende:

    Base
    |--->Base.php
    |
    |----includes
    |----|--->LicenseManager.php
    |
    |----structures
    |----|--->User.php
    |----|--->License.php

    So, und der ganze Ordner Base liegt in dem Verzeichnis "v3" auf meinem WebSpace.
    Im Ordner v3 sind aber noch andere Ordner als Base. Zum Beispiel der Ordner gw2mh.
    Darin befindet sich eine login.php.
    In der login.php würde ich gerne die Base.php inkludieren.
    Bedeutet ich habe in der login.php folgendes Statement verwendet:

    PHP-Quellcode

    1. require "./../base/Base.php";


    Um in der Base.php jetzt die User.php einzubinden muss ich folgendes machen:

    PHP-Quellcode

    1. require "./../base/structures/User.php";


    Wie man hier erkennen kann bedeutet das, dass die ganzen Klassen immer vom Hauptdokument (in diesem Fall login.php) abhängig sind.
    Das Problem hierbei ist jetzt nämlich folgendes:
    Wenn ich jetzt die Base.php von woanders inkludieren möchte stimmt die Pfadangabe nicht mehr.
    Versuche ich die Base.php z.B. von hier zu inkludieren:

    v3/login.php und nicht v3/gw2mh/login.php (wie vorher)
    dann bin ich ja ein Verzeichnis zuvor und alle Pfadangaben in den Klassen stimmen nicht mehr.

    Ich finde diese relativen Pfadangaben sind garkeine relativen pfadangaben in PHP. Das ist totaler schrott.
    Man ist in dieser Ka**sprache nur mit Problemen umgeben die es in anderen Sprachen nie gegeben hätte.

    Könnte mir vielleicht ne Einleuchtung geben wie ich das vernünftig löse?
    Würde es etwas ändern wenn ich vom Hauptskript (login.php) direkt ALLE klassen inkludiere? Also nicht User.php in Base.php inkludieren sondern Base.php, User.php und die ganzen anderen im login.php Dokument?

    Hoffe jemand kapiert was ich meine sonst bin ich echt durch mit dem Dreck.

    Danke im Voraus
    Ich würde ja eher zu so was wie define('INSTALLPATH', '/path/to/folder'); und require(INSTALLPATH.'/foo-bar.php'); tendieren ...
    Hi,

    Hoffe jemand kapiert was ich meine sonst bin ich echt durch mit dem Dreck.

    Interessiert mich persönlich ja auch eher einen Scheiß. Dann sag' ich lass es lieber anstatt uns deinen Mumpitz hier vorzuheulen.

    Zum Thema noch einige Überlegungen:
    - Ist login.php echt dein Hauptdokument? Kingt bissl wirr.
    - Schonmal was von Single-Point-Of-Entry gehört? Ggf. könnte das ein Konzept sein. Empfehle dir dass du dir mal die verschiedenen Architektur-/Entwurfsmuster anschaust. MVC könnte ein guter Ansatz für dich sein.
    - Tendiere ebenfalls dazu, die Pfade nur an einer einzigen Stelle zu setzen. Entweder wie @slice schon sagte mit define. Oder du machst für Konfigurationen -im besten Fall- eine eigene Datei. Ob das ne config.php ist oder -ähnlich wie im Zend Framework- ne application.ini bleibt dir überlassen.
    - require oder include würde ich generell bei Klassen überhaupt nicht machen. Ich mein, wann braucht man 'ne Klasse schon mal öfter als einmal? Mit require_once oder include_once solltest du besser zurechtkommen - damit passieren dann auch keine Missgeschicke.
    - wie du oben festgestellt hast, stimmen Pfadangaben nicht mehr, wenn man das Verzeichnis wechselt und die Pfade relativ angegeben wurden. Somit hast du deine eigene Frage bereits selbst beantwortet. Noch was unklar?

    Würde es etwas ändern wenn ich vom Hauptskript (login.php) direkt ALLE klassen inkludiere?

    Jein. Ab hier würde ich dann zu autoload raten, um eben nicht alle Files die vielleicht gebraucht werden inkludieren zu müssen.

    Ich finde diese relativen Pfadangaben sind garkeine relativen pfadangaben in PHP. Das ist totaler schrott.

    Genau. PHP ist schuld weil du es nicht raffst. Viel Spaß beim Programmieren ^^ Du wirst noch dahinter steigen dass jede Sprache so ihre Eigenheiten hat. Und du dich entweder damit abfindest oder es sein lässt ;)

    Link :thumbup:
    Hello World