Ankündigung

Einklappen
Keine Ankündigung bisher.

parent namespace zugriff

Einklappen

Neue Werbung 2019

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

  • parent namespace zugriff

    Hi,

    ich habe folgende 3 Ordner:
    - Frontend (mit index.php)
    - Backend (mit index.php)
    - Klassen (mit Klassen *.php)

    ich möchte erreichen, dass ich im Frontend & Backend mittels namespaces (bin absoluter einsteiger im namespace-bereich) auf Objekte zugreifen kann.

    Die ganzen tutorials sehen niemals vor auf irgendein parent zuzugreifen, oder es ist einfach nicht möglich und somit suche ich nach etwas das es nicht gibt und muss es ganz anders angehen (?)

    Um etwas konkreter zu werden:

    Klassen/Super.php
    Code:
    namespace Start\Klassen
    
    class Super {
     ...
    }
    Frontend/index.php

    Code:
    namespace Start\Frontend;
    use Start\Klassen;
    
    $super = new Super;
    ...
    Kann nicht gehen oder doch? Falscher Ansatz? Bitte um Hilfe

  • #2
    Hi,

    ich versteh nicht so ganz was du meinst. Du meinst gleichnamige Klassen in verschiedenen Namespaces ansprechen?
    => http://php.net/manual/de/language.na....importing.php
    "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

    Kommentar


    • #3
      Nein, ich meine dass der Zugriff auf meine "Super"-Klasse nicht funktioniert,
      warum... ?

      Die Klasse wird nicht gefunden, weil den namespace "Start" quasi nirgends definiert ist.
      (So meine Laien-Vermutung)

      In allen Tutorials wäre das index.php mit dem namespace "Start" versehen und auf die Unterordner wo sich das index.php befindet kann ich dann auf "Start\Frontend" & "Start\Backend" zugreifen.

      Ordnerstruktur müsste also so sein:
      - index.php
      - Frontend
      - Backend

      ich will aber im Frontend & Backend jeweils ein index.php haben und auf einen Ordner/Namespace zugreifen der auf der selben Ebene ist.

      Kommentar


      • #4
        Namespace sind ein Mittel Namenskollisionen zwischen eigenem Code
        und internen PHP-Klassen/Funktionen/Konstanten
        oder Klassen/Funktionen/Konstanten von Drittanbietern zu vermeiden.

        Sofern du kein Autoloader benutzt, musst du den include der Klassen in das jeweilige Script schon selbst organisieren. Mit Namespaces allein kannst du nicht auf Objekte zugreifen.

        Kommentar


        • #5
          den include habe ich ...
          hier mein konkreter Beispiel-Code, glaube ich habe es nicht geschafft richtig zu formulieren wo das Problem liegt.

          Nochmals die Ordner:
          - Frontend
          - Klassen

          Klassen/Super.php:
          Code:
          <?php
          
          namespace Start\Klassen;
          
          class Objekt {
          	function __construct() {
          		echo "TEST";
          	}
          }
          Frontend/index.php:
          Code:
          <?php
          namespace Start\Frontend;
          use Start\Klassen;
          
          require_once "../Klassen/Super.php";
          new Super;
          ?>
          Fatal error: Class 'Start\Frontend\Super' not found

          Wie wäre das umzusetzen (mit namespaces) ...?

          Kommentar


          • #6
            Du solltest schon bei use die Klasse mit benennen. Probier mal:

            Code:
            use Start\Klassen\Objekt;
            Altenativ kannst du den kompletten Namespace auch bei new benutzen:

            Code:
            new Start\Klassen\Objekt;

            oder mit as ein Alias setzen:

            Code:
            use Start\Klassen\objekt as KlassenObjekt;
            
            new KlassenObjekt;

            Kommentar


            • #7
              Aj ... Danke, habe gehofft dass es so eine Kleinigkeit ist!
              Haut nun hin!

              Außerdem habe ich class Objekt geschrieben und wollte new Super machen :/

              Danke für die rasche Hilfe!

              Kommentar

              Lädt...
              X