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
    1. private function meine_methode() {
    2. function tueIrgendEtwas($this) {
    3. $this->wayne;
    4. }
    5. $this->tueIrgendEtwas($this);
    6. }


    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?

  • 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
    1. (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 :)