Ankündigung

Einklappen
Keine Ankündigung bisher.

Konstruktor weißt Eigenschaft keinen Wert zu

Einklappen

Neue Werbung 2019

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

  • Konstruktor weißt Eigenschaft keinen Wert zu

    Guten Tag!
    Ich habe gerade noch ein kleines Problem. Ich möchte auf die Connection zugreifen die in der Index.php liegt bzw. auf die Variable $connection, damit ich sie in einer Model zugreifen kann & benutzen kann.

    Irgendwie weißt der Konstruktor den Eigenschaften keinen Wert zu, hier mein Code:
    PHP-Code:
    class Model {
        
        private 
    $_connection;
        private 
    $_controller;
        
        public function 
    __construct($controller$connection) {
            
    $this->_connection $connection;
            
    $this->_controller $controller;
        }
        
        public function 
    getController() {
            return 
    $this->_controller;
        }
        
        public function 
    getConnection() {
            return 
    $this->_connection;
        }

    Und mache folgendes:
    PHP-Code:
    require 'config.php';
    require 
    'sc/lib/Bootstrap.php';
    require 
    'sc/lib/Controller.php';
    require 
    'sc/lib/View.php';
    require 
    'sc/lib/Model.php';

    $connection = new MySQLi("localhost""root""***""**") or die($connection->error);
    $connection->set_charset('utf-8');
    $controller = new Controller($connection);
    new 
    Model($controller$connection); 
    Wenn ich ein Var_DUMP in einem der Models mache erhalte ich für die Methode getConnection() = NULL, wieso? Oo

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

  • #2
    Deine DB-Zugangsdaten sind vermutlich falsch und du nutzt kein Error-Reporting.

    PHP-Code:
    error_reporting(-1); // Alle Bits auf 1
    ini_set('display_errors'1); 

    Kommentar


    • #3
      Zitat von mermshaus Beitrag anzeigen
      Deine DB-Zugangsdaten sind vermutlich falsch und du nutzt kein Error-Reporting.

      PHP-Code:
      error_reporting(-1); // Alle Bits auf 1
      ini_set('display_errors'1); 
      Ich nutze error_reporting, meine Zugangsdaten sind auch nicht falsch. Ich bekomme hier keine Errors außer nur wegen der query().
      Dir gefällt mein Beitrag, ich habe Dir geholfen?
      Bewerte mich doch einfach!

      Kommentar


      • #4
        Die gepostete Klasse scheint zumindest so zu funktionieren, wie sie soll:

        PHP-Code:
        class Model {

            private 
        $_connection;
            private 
        $_controller;

            public function 
        __construct($controller$connection) {
                
        $this->_connection $connection;
                
        $this->_controller $controller;
            }

            public function 
        getController() {
                return 
        $this->_controller;
            }

            public function 
        getConnection() {
                return 
        $this->_connection;
            }
        }

        $model = new Model(new stdClass(), new stdClass());

        var_dump(
            
        $model,
            
        $model->getController(),
            
        $model->getConnection()
        ); 
        Code:
        object(Model)#1 (2) {
          ["_connection":"Model":private]=>
          object(stdClass)#3 (0) {
          }
          ["_controller":"Model":private]=>
          object(stdClass)#2 (0) {
          }
        }
        object(stdClass)#2 (0) {
        }
        object(stdClass)#3 (0) {
        }
        Edit: Ach ja, es muss „weist“ heißen. Weißen ist das, was man zum Beispiel mit Wänden tut.

        Kommentar


        • #5
          Zitat von mermshaus Beitrag anzeigen
          Die gepostete Klasse scheint zumindest so zu funktionieren, wie sie soll:

          PHP-Code:
          class Model {

              private 
          $_connection;
              private 
          $_controller;

              public function 
          __construct($controller$connection) {
                  
          $this->_connection $connection;
                  
          $this->_controller $controller;
              }

              public function 
          getController() {
                  return 
          $this->_controller;
              }

              public function 
          getConnection() {
                  return 
          $this->_connection;
              }
          }

          $model = new Model(new stdClass(), new stdClass());

          var_dump(
              
          $model,
              
          $model->getController(),
              
          $model->getConnection()
          ); 
          Code:
          object(Model)#1 (2) {
            ["_connection":"Model":private]=>
            object(stdClass)#3 (0) {
            }
            ["_controller":"Model":private]=>
            object(stdClass)#2 (0) {
            }
          }
          object(stdClass)#2 (0) {
          }
          object(stdClass)#3 (0) {
          }
          Interessant. Wenn ich VAR_DUMP in meiner testModel ausführe bekomme ich nur den Wert NULL zurück.

          PHP-Code:
          class testModel extends Model {
              public function 
          __construct() {
                  
          //$test = $this->getConnection()->query("SELECT * FROM users"); <- TEST QUERRY
                  //echo $test->num_rows;
                  
          var_dump($this->getConnection());
              }

          Dir gefällt mein Beitrag, ich habe Dir geholfen?
          Bewerte mich doch einfach!

          Kommentar


          • #6
            Du überschreibst den Konstruktor.

            Kommentar


            • #7
              Ich würd gern mal die Frage einwerfen, was Du Dir von der zweiten Zeile hier versprichst:
              PHP-Code:
              $controller = new Controller($connection);
              new 
              Model($controller$connection); 
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                Zitat von Arne Drews Beitrag anzeigen
                Ich würd gern mal die Frage einwerfen, was Du Dir von der zweiten Zeile hier versprichst:
                PHP-Code:
                $controller = new Controller($connection);
                new 
                Model($controller$connection); 
                Dies war ein kleiner Versuch, nun ja!
                Ich habe mal das ein wenig überarbeitet, des weiteren besteht mein Problem immer noch. ._.

                Wenn ich in meiner Index File einen var_dump() auf getConnection() mache, funktioniert es Super! Aber in der Model Klasse bzw. testModel bekomme ich einfach NULL zurück. Ist es normal?
                Dir gefällt mein Beitrag, ich habe Dir geholfen?
                Bewerte mich doch einfach!

                Kommentar


                • #9
                  Zitat von NecmiH Beitrag anzeigen
                  Aber in der Model Klasse bzw. testModel bekomme ich einfach NULL zurück. Ist es normal?
                  Zeig mal.
                  [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                  Kommentar


                  • #10
                    Zitat von NecmiH
                    Dies war ein kleiner Versuch, nun ja!
                    Ich habe mal das ein wenig überarbeitet, des weiteren besteht mein Problem immer noch. ._.
                    Und wie überarbeitet?! Du weißt, was daran falsch war/ist?
                    Competence-Center -> Enjoy the Informatrix
                    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                    Kommentar


                    • #11
                      Zitat von tkausl Beitrag anzeigen
                      Zeig mal.
                      PHP-Code:
                      class testModel extends Model {
                          public function 
                      test() {
                              
                      //$test = $this->getConnection()->query("SELECT * FROM users");
                              //echo $test->num_rows;
                              
                      var_dump($this->getConnection());
                          }

                      GetConnection() = NULL

                      Index.php:
                      PHP-Code:
                      require 'config.php';
                      require 
                      'sc/lib/Bootstrap.php';
                      require 
                      'sc/lib/Controller.php';
                      require 
                      'sc/lib/View.php';
                      require 
                      'sc/lib/Model.php';
                      require 
                      'sc/lib/Database.php';

                      $database = new Database("localhost""root""***""sc""3306");
                      $controller = new Controller();
                      $model = new Model($database->DatabaseConnect());
                      var_dump($model->getConnection());
                      $page null;

                      if(isset(
                      $_GET['page'])) {
                          
                      $page $_GET['page'];
                      }
                      new 
                      Bootstrap($page); 
                      getConnection() = MySQLi

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

                      Kommentar


                      • #12
                        In wie weit hast Du den Konstruktor von der Klasse Model denn verändert?
                        Der erwartet nämlich lt. Deiner bisherigen Veröffentlichungen zwei Parameter, Du übergibst aber nur einen!
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #13
                          Zitat von Arne Drews Beitrag anzeigen
                          In wie weit hast Du den Konstruktor von der Klasse Model denn verändert?
                          Der erwartet nämlich lt. Deiner bisherigen Veröffentlichungen zwei Parameter, Du übergibst aber nur einen!
                          Hier meine Model.php
                          PHP-Code:
                          class Model {

                              public 
                          $_connection;
                              public function 
                          __construct($connection null) {
                                  
                          $this->_connection $connection;
                              }
                              
                              public function 
                          getController() {
                                  return new 
                          Controller();
                              }
                              
                              public function 
                          getConnection() {
                                  return 
                          $this->_connection;
                              }

                          Dir gefällt mein Beitrag, ich habe Dir geholfen?
                          Bewerte mich doch einfach!

                          Kommentar


                          • #14
                            Und var_dump($model->getConnection()); sagt null?
                            Dann kann Dein $database->DatabaseConnect() nur null zurückgeben!

                            Mir ist aber so, als wäre das schon erwähnt worden.


                            EDIT: Ach so... Du meinst bspw. in Deiner testModel_Klasse?
                            PHP-Code:
                            class testModel extends Model 
                                public function 
                            test() { 
                                    
                            //$test = $this->getConnection()->query("SELECT * FROM users"); 
                                    //echo $test->num_rows; 
                                    
                            var_dump($this->getConnection()); 
                                } 

                            Du hast ja in dieser Klasse noch gar kein Objekt von Model, Du erbst lediglich die Methoden und Eigenschaften von Model, nicht aber die Instanz(en).
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                            Kommentar


                            • #15
                              Zitat von Arne Drews Beitrag anzeigen
                              Und var_dump($model->getConnection()); sagt null?
                              Dann kann Dein $database->DatabaseConnect() nur null zurückgeben!

                              Mir ist aber so, als wäre das schon erwähnt worden.
                              Ich hatte schon in meinen vorherigen Post gesagt, das er nur in der testModel Klasse NULL zurück gibt.

                              Sonst wenn ich auf $model->getConnection(); einen var_dump() ausführe bekomme ich die Werte die ich sehen will.
                              Dir gefällt mein Beitrag, ich habe Dir geholfen?
                              Bewerte mich doch einfach!

                              Kommentar

                              Lädt...
                              X