Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Objekte und __invoke()

Einklappen

Neue Werbung 2019

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

  • ByStones
    hat ein Thema erstellt [Erledigt] Objekte und __invoke().

    [Erledigt] Objekte und __invoke()

    Hallo,
    wie kann ich von einem Objekt auf die __invoke Funktion eines anderen Objekts zugrifen ?

    PHP-Code:
    <?php

    class foo{

     function 
    action(){
       
    $this->obj(); //also hier auf das andere Objekt __invoke()

     
    }

    }
    ?>
    Weil nun ist es ja nicht eindeutig ob man eine Funktion dieser Klasse meint, oder ein Objekt in der Eigenschaft über __invoke ansprechen will ?
    Wenn man so macht wäre es eindeutig:
    PHP-Code:
    <?php

    class foo{

     function 
    action(){
       
    $tmp $this->obj;
       
    $tmp(); // __invoke
     
    }

    }
    ?>
    Nun meine Frage: Gibt es ein Zeichen oder sowas in der Art dass man das ganze machen kann ohne es in eine Variable zwischen zu speichern ?
    Mit Zeichen meine ich sowas (Beispiel):
    PHP-Code:
    <?php
    //...
    $this->%obj(); 
    //...
    ?>
    Grüße

  • Flor1an
    antwortet
    Wäre aber ne andere Art als oben gefragt. Direkt gehts nicht. Über $this->obj->__invoke(5); funktioniert es!

    Aber wann setzt man invoke denn ein? Ich find das ganz schön unübersichtlich dadurch. Objekte sollten auch wie Objekte behandelt werden.

    Oder wie Big Lebowski sagen würden: "Er behandelt Objekte wie Frauen."

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Wie wärs damit:
    PHP-Code:
    $this->obj->__invoke(5); 
    Mit __toString geht sowas ja auch..

    Alternativ könnte man auch einfach eine Stino-Methode definieren, wie es sich gehört.
    PHP-Code:
    class Foo
      
    {
      public function 
    processAsFunction ($bar)
        {
        
    // do $bar
        
    }

      public function 
    __invoke ($bar)
        {
        return (
    $this->processAsFunction ($bar));
        }
      }

    class 
    Baz 
      
    {
      public function 
    __construct ()
        {
        
    $this->foo = new Foo;
        
    $this->bar '0848';
        }

      public 
    handleFoo ($bar)
        {
        
    $this->foo->processAsFunction ($this->bar);
        }
      } 
    PS: Wäre so ein Beispiel jetzt so schwer gewesen?

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Er meint das in der Property obj ein weiteres Objekt drinnen steckt welches eine __invoke() Methode hat.

    Und nein es gibt kein solches Zeichen. Es ist nicht möglich in PHP zu unterscheiden ob $this->obj(); ein Funktionsaufruf des selben Objektes ist oder ob obj ein Objekt mit invoke Methode ist.

    Von daher musst du immer den Umweg über die Variable gehen. Alles andere würde Parse Errors verursachen.

    PHP-Code:
    {$this->obj}(5
    würde einen Parse Error hervorbringen.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    oder ein Objekt in der Eigenschaft über __invoke
    Was soll das bedeuten? Eine Methode wird mit () am Ende aufgerufen, eine Property ohne angesprochen. Meinst Du eine Property von Foo namens __invoke, die ein Objekt enthält oder wie? Deine Beispiele sagen mir überhaupt nix.

    Einen Kommentar schreiben:

Lädt...
X