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

  • [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
    Signatur:
    PHP-Code:
    $s '0048656c6c6f20576f726c64';
    while(
    $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

  • #2
    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.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      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.

      Kommentar


      • #4
        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?
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        Kommentar


        • #5
          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."

          Kommentar

          Lädt...
          X