[OOP] Klasse benötigt andere Klasse / Pfadproblem

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

  • [OOP] Klasse benötigt andere Klasse / Pfadproblem

    Hallo Board,

    eine Script A benötigt eine Klasse ClassB. Diese befindet sich in classes/project/ClassB.php
    Nun benötigt diese ClassB eine weitere Klasse ClassA. Diese ClassA befindet sich in classes/entity/ClassA.php
    Nun steht in ClassB:

    require_once('../entity/classB.php')

    Wenn ich nun das Script A aufrufe kommt die Fehlermeldung für ClassB, dass ClassA nicht gefunden werden konnte.

    Warum nicht? Es ist wie verhext!

  • #2
    1. was hat das mit OOP zu tun?
    2. warum benutzt du keine absoluten pfade?
    Kissolino.com

    Kommentar


    • #3
      Re: [OOP] Klasse benötigt andere Klasse / Pfadproblem

      Original geschrieben von compuboy1010
      Nun steht in ClassB:

      require_once('../entity/classB.php')
      erm
      Zuletzt geändert von boris-schneider; 03.05.2006, 12:58.

      Kommentar


      • #4
        Wie bekommt man es hin, dass man im Script A nicht vorher alle Klassen inkludieren muss, die ClassB benötigt?
        Die Datei ClassB sollte sich selber die Klassen "besorgen" können.
        Sonst ergibt das doch keinen Sinn mit dem wiederverwertbaren Code.
        Zuletzt geändert von compuboy1010; 03.05.2006, 12:42.

        Kommentar


        • #5
          Ich dachte man sollte keine absoluten Pfade benutzen.
          Das steht sogar irgendwo auf selfhtml.

          Und was wenn ich die Klassen in einem anderen Projekt benutzen will? Dann bringen mir die absoluten Pfade doch nix.

          @ Boris: Das geht ja eben nicht mit den relativen Pfaden.
          Wenn die Klasse B in Script A inkludiert wird, dass muss man die ClassA ja von Script A aus betrachten.

          Wenn ich also require('classes/project/ClassA.php'); in Datei ClassB.php schreibe, dann funzt es. Das ist aber doch nicht Sinn der Sache. So ist die Klassenbibo doch nicht wiederverwertbar.
          Zuletzt geändert von compuboy1010; 03.05.2006, 12:44.

          Kommentar


          • #6
            Original geschrieben von compuboy1010
            Und was wenn ich die Klassen in einem anderen Projekt benutzen will? Dannbringen mir die absoluten Pfade doch nix.
            die frage ist nicht dein ernst, oder? legst du die klassen immer irgendwo ab, oder gibt es da eine regel?

            warum definierst du spezielle pfade in einer zentralen config nicht als konstanten oder packst sie in ein array, was an die klassen weitergereicht werden? oder, oder, oder ...
            Kissolino.com

            Kommentar


            • #7
              @compuboy1010
              Das ist ja klar mit dem inkludieren, keine Frage.
              Frage:
              Wie bekommt man es hin, dass man im Script A nicht vorher alle Klassen inckludieren muss, die ClassB benötigt.
              Die Datei ClassB sollte sich selber die Klassen "besorgen" können.
              Was ist daran denn so schwer ?

              Solange man eine ordentliche Verzeichnisstruktur hat ist das ganze doch kein thema, vorallem wenn sich die Scripte selbst nochmal entsprechend andere Klassen für den eigenen Funktionsaufruf holen müssen etc.

              Ich habe es bei mir so gelösst das ich eine globale Datei habe in der sich alles andere abspielt, somit muss ich wirklich immer nur diese überall einbinden um zugang auf alles andere zu haben.


              Sers
              Der Boris

              Kommentar


              • #8
                [OOP]

                Ähhm,

                doch ist mein erst. Hmmm

                Also ich habe weitere benötigte Klassen in den Klassendateien immer hardcodiert, da sich da doch nix ändert:

                PHP-Code:
                <?php
                require_once('classes/entity/company.class.php');

                class 
                Den extends Company {

                //...
                Brett vor dem Kopf.
                Wenn ich anstatt classes/ eine Variable benutze, dann muss ich ja immer noch in jeder Klassendatei eine config.php mit den Pfaden inkludieren.


                PS: es ist gar nix schwer dran, Boris. Das macht mich ja gerade verrückt. Warum findet er die Datei dann nicht?
                Zuletzt geändert von compuboy1010; 03.05.2006, 12:54.

                Kommentar


                • #9
                  Hi,

                  Ich regel das immer so, dass ich mir eine config baue, die alle Klassen einbindet. Die Konfiguration wird ein mal eingebunden in die index.php und ich muss dadurch alle Pfade so angeben, als würde ich von der index.php ausgehen.

                  Gruß Thomas

                  Kommentar


                  • #10
                    Re: [OOP]

                    Original geschrieben von compuboy1010
                    PS: es ist gar nix schwer dran, Boris. Das macht mich ja gerade verrückt. Warum findet er die Datei dann nicht?
                    Na weil du falsche Pfad angaben machst
                    Ansonsten würde ja alles gefunden werden!

                    Kommentar


                    • #11
                      Re: [OOP]

                      Original geschrieben von compuboy1010
                      Brett vor dem Kopf.
                      Wenn ich anstatt classes/ eine Variable benutze, dann muss ich ja immer noch in jeder Klassendatei eine config.php mit den Pfaden inkludieren.


                      PHP-Code:
                      // auszug aus meiner config:


                      $cfg['basic']['subdir'] = 'bla/';
                      .
                      .
                      .
                      // weitere parameter ^^


                      /* path */
                      define('MAINURL''http://'.$_SERVER['HTTP_HOST'].'/'.$cfg['basic']['subdir']);
                      define('MAINPATH'$_SERVER['DOCUMENT_ROOT'].'/'.$cfg['basic']['subdir']);
                      define('TPLPATH'$_SERVER['DOCUMENT_ROOT'].'/'.$cfg['basic']['subdir'].'templates/');
                      .
                      .
                      .
                      // weitere pfade oder zus. konstanten ^^

                      /* initialize classes */
                      require_once(MAINPATH.'inc/cmx.class.database.php');
                      require_once(
                      MAINPATH.'inc/cmx.class.template.php');
                      require_once(
                      MAINPATH.'inc/cmx.class.user.php');
                      require_once(
                      MAINPATH.'inc/cmx.class.cms.php');

                      $cfg['obj']['db'] = &new database();
                      $cfg['obj']['db']->init($database);

                      $cfg['obj']['tpl'] = &new template();
                      $cfg['obj']['tpl']->init(TPLPATHTRUE);

                      $cfg['obj']['us'] = &new user();

                      $cms = &new cms();
                      $cms->init($cfg);
                      $cms->start();


                      // die index.php
                      require_once('./inc/cmx.config.php');
                      $cms->showIndex();
                      echo 
                      $cms->output(); 
                      alles weitere passiert in den klassen. die pfade sind konstant und die einzelnen klassen, die nachgeladen werden müssen bedienen sich per referenz am $cfg-array. kann man sicher noch eleganter machen, aber ich bin ja kein programmierer

                      ps: ^^ php4 ... unter php5 wären die & überflüssig
                      Kissolino.com

                      Kommentar


                      • #12
                        Hi!

                        Diese ClassA befindet sich in classes/entity/ClassA.php
                        Befindet sich der Order "entity" in deinem Include-Path?

                        Cheerz Mirandus

                        Kommentar


                        • #13
                          Ja, aber wie ist es wenn eine Klasse B eine andere Klasse A erweitert und ich habe eine Klasse/Datei.

                          Wie instantiere ich dann die Klasse B?
                          Wenn ich nun die Klasse B erzeugn, woher weiß dann die Klasse B wo ihr Elterklasse ist?

                          Eine Beispielordnerstruktut mit Sklelettklassen wäre super.

                          Kommentar

                          Lädt...
                          X