Ankündigung

Einklappen
Keine Ankündigung bisher.

Cannot redeclare class

Einklappen

Neue Werbung 2019

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

  • Cannot redeclare class

    Guten Tag, liebe Gemeinschaft!
    Ich habe derzeit ein sehr kleines Problem, wobei ich derzeit alle Tipps von Google nachgegangen bin!

    Ich bekomme folgenden Error:
    Code:
    Fatal error: Cannot redeclare class Source\Classes\MVCClasses\View in /Applications/XAMPP/xamppfiles/htdocs/source/classes/mvcClasses/view.php on line 3
    Der Code wo alles ausgeführt wird bzw. den Fehler hervorruft:
    PHP-Code:
    <?php
    namespace Source\Classes\ControllerClasses;
    class 
    Controller {
      public function 
    view() {
        require 
    __DIR__ '/../mvcClasses/view.php';
        return new \
    Source\MVCClasses\View;
      }
    }
    Und meine View.php:
    PHP-Code:
    <?php
    namespace Source\Classes\MVCClasses;
    class 
    View {
      public function 
    display($file) {
        if(
    file_exists(require PHP_PATH.'/sc/views/'$file .'.tpl.php')) {
          require 
    PHP_PATH.'/sc/views/'$file .'.tpl.php';
        }
      }
    }
    Wo ist der Fehler? Ich komme seit Tagen nicht weiter, weil ich ständig diesen dummen Fehler habe...

    Ahja, und meine Index.php falls es euch weiterhilft:
    PHP-Code:
    <?php
    session_start
    ();
    define('PHP_PATH'__DIR__.'/');
    require 
    'source/classes/databaseClasses/mysqli.php';
    require 
    'source/classes/mvcClasses/view.php';
    require 
    'source/classes/mvcClasses/PageManager.php';
    require 
    'source/classes/controllerClasses/Controller.php';

    $mysqli = new \Source\Classes\databaseClasses\MySQLi("localhost""root""xxxx""source""3306");
    $tpl = new \Source\Classes\MVCClasses\view;
    $mysqli->Connect();
    new \
    Source\Classes\ControllerClasses\Controller;
    new \
    Source\Classes\MVCClasses\PageManager;
    Ich habe bisher alles versucht auch require_once() und include_once(), hat leider nichts gebracht. Deswegen wollte ich mal hier nachfragen ob es nun an mir liegt oder an meinen Code. :S

    Freue mich auch jede Antwort!
    MfG.
    Dir gefällt mein Beitrag, ich habe Dir geholfen?
    Bewerte mich doch einfach!


  • #2
    Zitat von NecmiH Beitrag anzeigen
    Ich habe bisher alles versucht auch require_once() und include_once(), hat leider nichts gebracht.
    Das kann ich nicht glauben. Du solltest allerdingseinen Autoloader nutzen.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      In der index.php und in der Controller-Klasse bindest Du die View-Klasse ein, womit Sie 2 mal geladen wird und der Error Cannot redeclare Class... produziert wird. Hau die require-Anweisung aus der Controller-Klasse raus und das Thema hat sich erledigt. Oder noch besser:
      Zitat von tklausl
      Du solltest allerdings einen Autoloader nutzen.

      Kommentar


      • #4
        Zitat von NecmiH Beitrag anzeigen
        PHP-Code:
        public function view() {
            require 
        __DIR__ '/../mvcClasses/view.php';
            return new \
        Source\MVCClasses\View;

        Das ist Müll. Vergiss das am besten schnell wieder.

        Kommentar


        • #5
          Am Rande: Das require hier…

          PHP-Code:
          if(file_exists(require PHP_PATH.'/sc/views/'$file .'.tpl.php')) { 
          …dürfte so auch nicht gewollt sein.

          Ich würde das zudem als vorgezogene „Guard-Clause“ schreiben und eine Exception werfen lassen. Von der Idee her so:

          PHP-Code:
          $path PHP_PATH '/sc/views/' $file '.tpl.php';

          if (!
          file_exists($path) || !is_readable($path)) {
              throw new 
          Exception('...');
          }

          require 
          $path
          Tipp: Schau dir auch mal fertige MVC-Stacks (vor allem den View-Teil) etwa aus Frameworks und/oder (Übergang ist fließend) von Template-Engines wie Twig oder so an. Was du gerade konstruierst, wird vermutlich nicht sonderlich flexibel. Dabei dürftest du dann auch sehen, wie so was mit Autoloading funktioniert.

          Kommentar

          Lädt...
          X