Ankündigung

Einklappen
Keine Ankündigung bisher.

Constant expression contains invalid operations

Einklappen

Neue Werbung 2019

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

  • #16
    Zitat von Meister1900 Beitrag anzeigen
    Der Aufruf muss so lauten:

    PHP-Code:
    $conData $this->getConnectionData(); 
    Die Klammern scheinst du ja nachträglich noch korrigiert zu haben.

    ok, super danke.
    Bedeutet also immer wenn ich eine function aus der Klasse verwende muss immer $this davor, ja?

    Kommentar


    • #17
      Zitat von Meister1900 Beitrag anzeigen
      Der Aufruf muss so lauten:

      PHP-Code:
      $conData $this->getConnectionData(); 
      Die Klammern scheinst du ja nachträglich noch korrigiert zu haben.
      ok, super danke.
      Bedeutet also immer wenn ich eine function aus der Klasse verwende muss immer $this davor, ja?

      Kommentar


      • #18
        Korrekt, $this ist immer das aktuelle Objekt. In einer Klasse spricht man von Methoden und nicht von Funktionen. Schaue dir am besten mal OOP Basics an:
        http://php.net/manual/de/language.oop5.basic.php
        sorry, shift-taste kaputt

        Kommentar


        • #19
          Zitat von Meister1900 Beitrag anzeigen
          Korrekt, $this ist immer das aktuelle Objekt. In einer Klasse spricht man von Methoden und nicht von Funktionen. Schaue dir am besten mal OOP Basics an:
          http://php.net/manual/de/language.oop5.basic.php
          ok, danke damit kann ich was anfangen.
          Hast du einen Tipp zurlösung vom Fehler aus Zeile 18?

          Kommentar


          • #20
            Lass die Zeile einfach weg. Du leitest deine MySQL Klasse ja vom LogSystem ab. Also kannst du auch direkt auf dessen Methoden zugreifen mit $this
            Wenn du ein Objekt instantiieren musst, dann innerhalb einer Methode (wie du es bei PDO machst) oder von außen (z.B. via Construktor) injizieren ("Dependency Injection").
            sorry, shift-taste kaputt

            Kommentar


            • #21
              Das Ableiten bzw. vererben Ist der nächste Fehler. Besser das DB Verbindungsobjekt als Parameter ubergeben.

              Vererbung ist eine "ist ein(e)" Beziehung aber eine DB ist kein Logger.
              The string "()()" is not palindrom but the String "())(" is.

              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #22
                Zitat von Meister1900 Beitrag anzeigen
                Lass die Zeile einfach weg. Du leitest deine MySQL Klasse ja vom LogSystem ab. Also kannst du auch direkt auf dessen Methoden zugreifen mit $this
                Wenn du ein Objekt instantiieren musst, dann innerhalb einer Methode (wie du es bei PDO machst) oder von außen (z.B. via Construktor) injizieren ("Dependency Injection").

                Stop, ich muss doch aber ein Objekt mit der Class erstellen um auf die funktion writeLogEvent in der Classe logSystem zugreifen zu können:

                PHP-Code:
                <?php

                    
                class LogSys {


                        public const 
                ERRORFILEPATH "../data/Log.log";

                        public function 
                writeLogEvent($ErrorType$ErrorMessage) {
                            
                $timestamp time();
                            
                $datum date("H:i:s - d.m.Y"$timestamp);

                            
                $ErrorString "[" $datum "]  " $ErrorType " = " $ErrorMessage;

                            if(!(
                file_exists(self::ERRORFILEPATH))) {
                                if(!(
                createNewLogfile())) throw new Exception("Error Processing 'createNewLogfile' Request"1);
                            }

                            if(!(
                file_put_contents(self::ERRORFILEPATH$ErrorStringFILE_APPEND))) throw new Exception("Error Processing 'writeContent' Request"1);

                            return 
                true;
                        }

                        
                /*
                        * @return boolean true if everything was correct | false if errors occurred
                        */
                        
                public function createNewLogfile() {
                            try {
                                
                $datei fopen(self::ERRORFILEPATH'w');
                                
                fwrite($dateinull);
                                
                fclose($datei);

                                return 
                true;
                            } catch(
                Exeption $e) {
                                return 
                false;
                            }
                        }

                    }


                    
                // Error Layout -> [12:45:12 - 12.08.2018] CRITICAl_ERROR Es konnte keine verbindung zum DB_Server aufgebuat werden!
                ?>
                Dies mache ich ja in Zeile 18.

                PHP-Code:
                <?php

                    
                include 'LogSystem.php';
                    use 
                LogSystem\LogSys as LogSystem;

                    class 
                MySQL extends LogSystem {


                        const 
                FILEPATH "";

                        private 
                $hostname null;
                        private 
                $port null;
                        private 
                $username null;
                        private 
                $password null;
                        private 
                $dbname null;

                        private 
                $log = new LogSystem();

                        function 
                __construct() {
                            
                $conData getConnectionData();
                            
                $this->hostname $conData->hostname;
                            
                $this->port $conData->port;
                            
                $this->username $conData->username;
                            
                $this->password $conData->password;
                            
                $this->dbname $conData->dbname;
                        }

                        function 
                createMySQLConnection() {
                            try {
                                
                $pdo = new PDO('mysql:host='$this->hostname +';dbname='$this->dbname +''''$this->username +''''$this->password +'');
                                return 
                $pdo;
                            } catch(
                Exeption $e) {
                                return 
                false;
                            }
                        }

                        public function 
                refreshConnectionData() {
                            
                $conData getConnectionData();
                            
                $this->hostname $conData->hostname;
                            
                $this->port $conData->port;
                            
                $this->username $conData->username;
                            
                $this->password $conData->password;
                            
                $this->dbname $conData->dbname;
                        }

                        private function 
                getConnectionData() {
                            
                $handle fopen (self::FILEPATH"r");
                            
                $rawData json_decode(fread ($handlefilesize ($dateinamen)));
                            
                fclose ($handle);

                            return 
                $rawData;
                        }

                    }

                ?>
                Oder sehe ich das falsch?

                Kommentar


                • #23
                  Ja, das siehst du falsch. Du kannst direkt $this->writeLogEvent() in der MySQL Klasse verwenden, ohne den Logger instantiieren zu müssen.
                  Wenn du die Vererbung ("extends LogSystem") weg lässt, wie hausl beschrieben hat, dann musst du den Logger separat instantiieren.
                  Ich kann mich nur noch mal wiederholen, schau dir OOP Grundlagen an.
                  sorry, shift-taste kaputt

                  Kommentar


                  • #24
                    Zitat von hausl Beitrag anzeigen
                    Das Ableiten bzw. vererben Ist der nächste Fehler. Besser das DB Verbindungsobjekt als Parameter ubergeben.

                    Vererbung ist eine "ist ein(e)" Beziehung aber eine DB ist kein Logger.
                    also:
                    PHP-Code:

                    class Logger{

                     public function 
                    __construct(DBConnector  $dbConnetor ) {

                          
                    $this->dbConnector dbConnector;

                     }
                    }
                    $db = new DBConnector();
                    new 
                    Logger($db); 
                    weder Fopen noch fwrite wrift eine Execption, wieso nutzt Du try/catch ?

                    Kommentar


                    • #25
                      Zitat von Meister1900 Beitrag anzeigen
                      Ja, das siehst du falsch. Du kannst direkt $this->writeLogEvent() in der MySQL Klasse verwenden, ohne den Logger instantiieren zu müssen.
                      Wenn du die Vererbung ("extends LogSystem") weg lässt, wie hausl beschrieben hat, dann musst du den Logger separat instantiieren.
                      Ich kann mich nur noch mal wiederholen, schau dir OOP Grundlagen an.
                      Ich habe gerade das ganze mal mittels ionclude probiert.

                      PHP-Code:
                      include("LogSystem.php"); 
                      und wollte dann eine instanz erstellen:
                      PHP-Code:
                      public $ls = new LogSystem(); 
                      Aber ich bekomme immer noch einen fehler

                      HTML-Code:
                      Constant expression contains invalid operations
                      Irgendwo stehe ich gerade auf dem Schlauch
                      s invalid

                      Kommentar


                      • #26
                        Dass es so nicht funktioniert habe ich dir ja schon in Beitrag #6 geschrieben. Da ändert auch kein include was dran.
                        Man kann ein Objekt nicht direkt als Eigenschaft deklarieren. Das musst du innerhalb einer Methode machen oder wie beschrieben von außen injizieren.
                        sorry, shift-taste kaputt

                        Kommentar


                        • #27
                          Zitat von WebInsel Beitrag anzeigen

                          Ich habe gerade das ganze mal mittels ionclude probiert.

                          PHP-Code:
                          include("LogSystem.php"); 
                          und wollte dann eine instanz erstellen:
                          PHP-Code:
                          public $ls = new LogSystem(); 
                          Aber ich bekomme immer noch einen fehler

                          HTML-Code:
                          Constant expression contains invalid operations
                          Irgendwo stehe ich gerade auf dem Schlauch
                          s invalid
                          wenn ich aber extends verwende geht es auch nicht

                          Kommentar


                          • #28
                            Hab ich ja jetzt auch schon dreimal geschrieben, dass du in diesem Fall gar nicht instanziieren brauchst.
                            Die Zeile
                            public $ls = new LogSystem();
                            ist immer falsch. Egal was irgendwo davor, dahinter oder drumherum steht.
                            sorry, shift-taste kaputt

                            Kommentar


                            • #29
                              Ja, aber $this->writeLogEvent(), geht auch nicht.

                              Kommentar


                              • #30
                                Was heißt "geht nicht"? Wenn er die Methode nicht findet würde er sagen:
                                Fatal error: Uncaught Error: Call to undefined method MySQL::writeLogEvent()

                                Alles andere sind weitere Fehler, die du fixen musst.
                                sorry, shift-taste kaputt

                                Kommentar

                                Lädt...
                                X