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.
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    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.
        [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

        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