Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] "Access to undeclared static property" von self::

Einklappen

Neue Werbung 2019

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

  • [Erledigt] "Access to undeclared static property" von self::

    Hallo zusammen.

    Ich habe ein kleines Problem und hoffe das mir jemand einen Tipp geben kann, wie ich diese Problem lösen kann. Hab dazu schon einige Zeit in google und die PHP Doku investiert, aber keine brauchbare Lösung gefunden.

    Ich schreibe eine eigene Logging Klasse..
    PHP-Code:
    namespace CustomLog;

    class 
    Logging {
        public function 
    __construct() {
            
    self::$logfile PROJECT_DOCUMENT_ROOT.'/inc/log/'.date('d_m_Y'.time()).'_log.txt';
        }   
        
        public function 
    __invoke($message,$level 'INFO') { 
            
    //if file's not open, do that
            
    if(!self::$fileHandle)self::$fileHandle fopen(self::$loglevel,'a+');
            echo 
    "blabla";
        }

    Und als Error bekomme ich
    Code:
    PHP Fatal error:  Access to undeclared static property: Prov\\System\\Logging::$logfile
    Meines Verständnisses nach sollte ich mit ich mit self::$variable in der Klasse oder Funktion in der Klasse damit eine Variable definieren und Methoden aufrufen.

    Was mache ich hier falsch?

    Vielen Dank!

    LG
    Seichi

  • #2
    Zitat von seichi Beitrag anzeigen
    Ich habe ein kleines Problem und hoffe das mir jemand einen Tipp geben kann, wie ich diese Problem lösen kann. Hab dazu schon einige Zeit in google und die PHP Doku investiert, aber keine brauchbare Lösung gefunden.

    Ich schreibe eine eigene Logging Klasse..
    PHP-Code:
    namespace CustomLog;

    class 
    Logging {
        public function 
    __construct() {
            
    self::$logfile PROJECT_DOCUMENT_ROOT.'/inc/log/'.date('d_m_Y'.time()).'_log.txt'
    self::$logfile wird nicht deklariert.

    PHP-Code:
        public static $logfile// Accessor nach Deinen Wünschen ändern 
    würde das ändern. des selbe gilt auch für self::$fileHandle

    Gruß, Ulf
    PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

    Kommentar


    • #3
      Ne, properties müssen deklariert werden.
      http://php.net/manual/de/language.oop5.static.php
      [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
      [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

      Kommentar


      • #4
        Überlege ob es sinnvoll ist, dein Logfilename als static zu machen.
        Sonst:
        PHP-Code:
        $this->logfile = ... 
        Ich würde mir die Möglichkeit offen lassen, dem Konstruktor einen Logfilenamen übergeben zu können.
        Konstanten wie PROJECT_DOCUMENT_ROOT, welche ausserhalb der Klasse definiert sind, in Methoden zu verwenden schafft unnötige Abhängigkeiten.
        Non-Static Properties müssen am Rande bemerkt nicht deklariert werden, ist aber zu empfehlen.

        Kommentar


        • #5
          Vielen Dank!

          Das erklärt einiges..
          Ich habe jetzt alles mal auf
          PHP-Code:
          $this-> 
          umgebaut..

          Nur noch 3 Frage:

          1) $this-> setzte ich ein für Variablen,Methoden die ich in einer Klasse/Funktion definiere ?
          2) Wenn ich eine variable die ich bei einem Funktionsaufruf definiere wird NICHT mit $this-> angesprochen ? (function __construct($variable) )
          3) warum setzt man dann überhaupt self:: ein, wenn es mit $this-> einfacher ist?

          Kommentar


          • #6
            Zitat von seichi Beitrag anzeigen
            1) $this-> setzte ich ein für Variablen,Methoden die ich in einer Klasse/Funktion definiere ?
            2) Wenn ich eine variable die ich bei einem Funktionsaufruf definiere wird NICHT mit $this-> angesprochen ? (function __construct($variable) )
            3) warum setzt man dann überhaupt self:: ein, wenn es mit $this-> einfacher ist?
            Statischer Kontext, Instanzkontext und Lokaler Kontext sind 3 Grundverschiedene Dinge.
            http://www.php.de/php-einsteiger/489...rundlagen.html
            [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

            Kommentar


            • #7
              Zitat von seichi Beitrag anzeigen
              Nur noch 3 Frage:

              1) $this-> setzte ich ein für Variablen,Methoden die ich in einer Klasse/Funktion definiere ?
              2) Wenn ich eine variable die ich bei einem Funktionsaufruf definiere wird NICHT mit $this-> angesprochen ? (function __construct($variable) )
              3) warum setzt man dann überhaupt self:: ein, wenn es mit $this-> einfacher ist?
              1) Jup
              2) Jup
              3) self:: ist für statische Sachen. Also alles was mit static oder const deklariert wurde.

              Edit: Also vereinfacht ausgedrückt. Schau dir einfach die Materialien von meinem Vorredner an
              Die mysql_* Erweiterung ist veraltet!
              Besser: mysqli_* oder (noch besser) PDO

              Kommentar


              • #8
                Besten Dank!
                Hab alles kapiert

                Thema erledigt

                Kommentar

                Lädt...
                X