Ankündigung

Einklappen
Keine Ankündigung bisher.

class::method should not be called statically

Einklappen

Neue Werbung 2019

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

  • class::method should not be called statically

    Hi,

    ich habe die neuste PHP Version eingespielt, jetzt bekomme ich Erros angezeigt, wenn ich mein Skript ausführe.

    Ja, ich könnte das error_reporting Level runter setzen, aber ein Skript funktioniert nicht mehr:

    Code:
    $namespace = User::getNamespace($namespace, TRUE);
    wirft folgenden Fehler:
    User::getNamespace should not be called statically
    Leider wird mir aus der Doku nicht so ganz klar, was ich ändern müsste.
    So wurde das ursprünglich benutzt:
    http://www.php.net/manual/de/keyword...ekudotayim.php
    und jetzt so:
    http://www.php.net/manual/de/languag...ekudotayim.php

    Mit self::getNamespace funktioniert es leider auch nicht
    Könnt ihr mir da helfen?
    Wo klemmt es denn und was muss ich jetzt benutzen?

    Danke schon mal
    Bye, Transmitter

  • #2
    Objektmethoden setzen die Existenz von $this vorraus (bzw dass $this auf den Namensraum des Objekts verweist).
    Du rufst nun eine solche Objektmethode ohne diesen $this-Kontext auf und das bemängelt php.

    http://www.php.net/manual/de/languag...ekudotayim.php
    Der Gültigkeitsbereichsoperator (auch Paamayim Nekudotayim genannt) oder in einfacheren Worten der Doppel-Doppelpunkt ist ein Kürzel, das Zugriff auf statische, konstante und überschriebene Member oder Methoden einer Klasse erlaubt.

    Kommentar


    • #3
      Wenn ich $this -> getNamespace verwende, funktioniert es leider auch nicht, hatte ich schon probiert.

      Wie ist das denn mit dem Namensraum bzw. mit statischen Methoden?
      class::method ruft ja normalerweise statische Methoden auf, die sind nur dafür gut, dass sie nicht von Subklassen überschrieben werden oder auch noch für was anderes?

      Und werden die im Namensraum der Instanz ausgeführt, oder muss für diese Art Aufruf gar keine Instanz existieren?

      Kommentar


      • #4
        Zitat von Transmitter
        Wenn ich $this -> getNamespace verwende, funktioniert es leider auch nicht, hatte ich schon probiert.
        Wie hast du $this verwendet und welche Fehlermeldung(en) erhälst du?

        Zitat von Transmitter
        Wie ist das denn mit dem Namensraum bzw. mit statischen Methoden?
        class::method ruft ja normalerweise statische Methoden auf, die sind nur dafür gut, dass sie nicht von Subklassen überschrieben werden oder auch noch für was anderes?
        -> http://www.php.net/manual/en/language.oop5.static.php

        Zitat von Transmitter
        Und werden die im Namensraum der Instanz ausgeführt, oder muss für diese Art Aufruf gar keine Instanz existieren?
        Ich verstehe diese Frage nicht.

        Kommentar


        • #5
          Anstelle von User::getNamespace habe ich einfach $this->getNamespace eingesetzt.

          Dann bekomme ich keine Fehlermeldung mehr, es funktioniert einfach nur nicht.
          Das muss aber etwas mit dem Update auf die PHP Version 5.1.0 zu tun haben, in einer niedrigeren PHP 5 Version hat alles funktioniert.
          Der Changelog hilft mir leider nicht weiter

          Ich verstehe diese Frage nicht.
          Ich habe irgendwann mal gelernt, dass man eine Methode aufrufen kann, ohne die Klasse zu instanzieren.
          Damit würde kein Namespace für die Klasse existieren und da ich in meinem Falle mit einer Instanz arbeiten muss, da die Daten in einem Sessioncontainer gespeichert werden, wollte ich wissen, ob User::getNamespace wirklich im richtigen Namensraum agiert.
          Falls nicht, würde das mein Problem erklären, dass ich nicht mehr an die Daten in der Session komme.

          Ist leider recht komplex das ganze, da es auf einem MVC Framework basiert und ich durch das PHP Update und keine genauen Fehlermeldungen den Fehler nicht lokalisieren kann

          Kommentar


          • #6
            Zitat von Transmitter
            Anstelle von User::getNamespace habe ich einfach $this->getNamespace eingesetzt.

            Dann bekomme ich keine Fehlermeldung mehr, es funktioniert einfach nur nicht.
            $this wird nur innerhalb einer Klasse verwendet, um auf das aktuelle Objekt zu referenzieren. Außerhalb der Klasse müsstest du also statt $this das Objekt angeben, welches du mit Hilfe des Schlüsselwortes new erstellt hast.

            Zitat von Transmitter
            Ich habe irgendwann mal gelernt, dass man eine Methode aufrufen kann, ohne die Klasse zu instanzieren.
            Eben dafür muss eine Methode als statisch deklariert werden.

            Kommentar


            • #7
              statisch oder einfach ein Object erstellen

              $name = new MeineKlasse();

              $name->meineKlassenMethodedienichtstatischseinmuss();

              Dann kannst du die Funktion aufrufen.

              Statische funktionen auch über ::

              Beste,
              Tim
              Typo3 Suchmaschinenoptimierung <- alles Rund um SEO mit Typo3

              Kommentar


              • #8
                Ja, wie das funktioniert ist mir klar ...

                Mit $this->MethodenBezeichner habe ich nur in diesem Falle das Problem, dass es nicht funktioniert ohne einen Fehler zu erzeugen.
                Vor dem Update hat es aber funktioniert und im Changelog finde ich nichts ..
                Ich weiß nicht wie ich an den Fehler ran kommen soll

                Kommentar


                • #9
                  Zitat von Transmitter
                  Ich weiß nicht wie ich an den Fehler ran kommen soll
                  Vielleicht schaust Du Dir das Ganze noch einmal in Ruhe an... :wink:

                  Kommentar


                  • #10
                    Zitat von Transmitter
                    Mit $this->MethodenBezeichner habe ich nur in diesem Falle das Problem, dass es nicht funktioniert ohne einen Fehler zu erzeugen.
                    Das funktioniert natürlich nur aus einem Objektkontext heraus. Wenn Du kein Objekt hast, dann hast Du auch kein $this und kannst es also auch nicht benutzen.

                    Zitat von Transmitter
                    Ich habe irgendwann mal gelernt, dass man eine Methode aufrufen kann, ohne die Klasse zu instanzieren.
                    Ja, statische Methoden ohne Objektkontext.

                    Zitat von Transmitter
                    Das muss aber etwas mit dem Update auf die PHP Version 5.1.0 zu tun haben, in einer niedrigeren PHP 5 Version hat alles funktioniert.
                    Ältere PHP Versionen haben einfach nicht schon vor dem Eintritt in die Methode gemeckert, sondern erst, wenn in der Funktion wirklich $this verwendet wird und nicht vorhanden ist. Es gab von aussen betrachtet keine Unerscheidung zwischen statischen und objektbezogenen Methoden.
                    Bei php5 ist das etwas rigider geregelt. Wenn Deine Methode keinen Objektkontext (kein $this) benötigt, dann markiere sie dementsprechend.
                    http://www.php.net/language.oop5.static

                    Kommentar

                    Lädt...
                    X