PHP? function() in einer methode() [Objektorientierung] - Gültigkeit von $this

  • Grüße!
    Was soll denn dieser Mist?
    Wenn man eine function() in einer methode() einer php-klasse{} definiert, so ist $this darin nicht gültig. Und wenn man $this als Parameter übergeben will um dann darauf zugreifen zu können, bekommt man die Fehlermeldung:
    Using $this when not in object context in ...

    PHP
    private function meine_methode() {
        function tueIrgendEtwas($this) {
            $this->wayne;
        }
        $this->tueIrgendEtwas($this);
    }


    Wo ist da die Logik? Ich würde es als logischer empfinden, wenn $this in diesem Falle direkt gültig wäre .. oder zumidnest als Parameter .. oder wie seht ihr das?
    Wenn ich $this in der function() mit var_dump() ausgebe steht dort sogar es sei ein Objekt ... hm ... was soll das?

  • @Basiii:


    Ich muss innerhalb der Methode zweimal einen quasi selben Codeabschnitt ausführen (überprüfung). Damit das nicht doppelt-gemoppelt wird dachte ich mir, dass ich das mal versuche in eine function() einzubauen ... so wurde es mir auch von meiner IDE empfohlen.

  • Das tolle an der OOP ist doch aber das wir nicht daran gebunden sind wo wir etwas definieren sondern nur daran wo wir es aufrufen?


    Wenn du ein Auto im Auto hast und im inneren Auto den Blinker betätigst blinkt das äußere Auto auch nicht ;)

  • @Basiii:
    Dank lauras: konnte ich den Fehler finden. Der Parameter darf nicht $this heißen!
    Aber ich weiß nicht .. für eine methode noch eine zwischen-methode definieren? würde mir unlogischer erscheinen, als eine eigene function(). oder? :)

  • Wie wäre es mit goto *hust*, ich bin hier fertig :D


    Ich möchte hier anmerken das es sich bei diesem Beitrag um einen SCHERZ handelt, auch in diesem Kontext ist goto KEINE Alternative für irgendwas.

  • Das kommt halt wie immer auf den Kontext an.. Ist es eine Methode die sinngemäß zur Klasse gehört dann als Klassen-Methode definieren (evtl. als statisch je nach Verwendungszweck), ist es eine Methode die sinngemäß nicht zur Klasse gehört als function der zugehörigen Methode.

  • Nunja, hast du z.B. eine function die irgendwas berechnet was aber nichts direkt mit der Funktionalität der Klasse zu tun hat, was weiß ich, irgendwelche Werte die irgendwo gebraucht werden aber nicht Teil des Objektes sind z.B., dann macht eine function mehr Sinn.

  • japp, zB eine getUserIp() function.
    nicht genug um eine Klasse zu schreiben, also als normalo function genutzt.


    Btw: WENN Du functions in functions (oder methoden) definierst, dann setze ein if(function_exists()) davor.
    Sonst schmeißt es Dir nen Fehler bei erneuten aufrufen.
    EDIT:


    had grad mal was wissen wollen, zwecks private und public und dabei festgestellt:
    nennt man eine Methode test(), dann wird die beim erzeugen eines objects ausgeführt oO? wtf!


    hier der test;


    innerhalb der (normalo) function gehen die Rechte flöten.
    Bin grad ziemlich müde, aber ich denke das liegt daran, dann (bildlich gesehen) das object in der normalo function als "draußen" gesehen wird. Also nicht mehr in der Klasse genutzt wird.


    Aber noch mal zu methode test: jemand mal was darüber gelesen?

  • Roland:
    dann müsste es schon

    PHP
    (new Name());


    heißen für ein anonymes Objekt. ;)


    cottton:
    Naja aber das was du gemacht hast ist ja auch was anderes. Es ging mir um functionen() in methoden() :)
    PS: Aber dennoch ein sehr interessantes Verhalten das du da aufgedeckt hast.


    Zitat

    nennt man eine Methode test(), dann wird die beim erzeugen eines objects ausgeführt oO? wtf!


    Das ist die "alte" Handhabung von Konstruktoren. Die haben den gleichen Namen wie die Klasse. ;)


    *edit*: Roland hat das nachträglich auch in seinem obigen Beitrag eingetragen. Nicht wundern über doppelten Content :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!