Bobby: Verschachteln von PHP-Funktionen

Moin

Warum kann ich

$words = explode(",", $this->keywords);  
shuffle($words);  
return $result = implode(",", $words);

nicht zu

return $result = implode(",", shuffle(explode(",", $this->keywords)));

zusammenfassen?

Gruß Bobby

--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
### Henry L. Mencken ###
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
## Viktor Frankl ###
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  1. Hallo,

    $words = explode(",", $this->keywords);

    shuffle($words);
    return $result = implode(",", $words);

    
    >   
    > nicht zu  
    >   
    > `return $result = implode(",", shuffle(explode(",", $this->keywords)));`{:.language-php}  
    >   
    > zusammenfassen?  
      
    weil PHP nur Arrays manipulieren kann, die als Variableninhalt im Speicher verfügbar sind, aber nicht temporäre, die noch nicht zugewiesen sind.  
      
    Ciao,  
     Martin  
    
    -- 
    Wenn zwei dasselbe tun, sind sie vielleicht bald zu dritt.  
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    
    1. Moin

      weil PHP nur Arrays manipulieren kann, die als Variableninhalt im Speicher verfügbar sind, aber nicht temporäre, die noch nicht zugewiesen sind.

      Irgend sowas hatte ich schon vermutet. :-( Mist.

      Gruß Bobby

      --
      -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
      ### Henry L. Mencken ###
      -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
      ## Viktor Frankl ###
      ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
      1. Moin

        naja zumindest so kann ichs halbwegs zusammenfassen:

        shuffle(($words=explode(",",$this->keywords)));  
        return implode(",", $words);
        

        wenigstens etwas.

        Gruß Bobby

        --
        -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
        ### Henry L. Mencken ###
        -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
        ## Viktor Frankl ###
        ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    2. Hi!

      $words = explode(",", $this->keywords);

      shuffle($words);
      return $result = implode(",", $words);

      
      > > nicht zu  
      > > `return $result = implode(",", shuffle(explode(",", $this->keywords)));`{:.language-php}  
      > > zusammenfassen?  
      > weil PHP nur Arrays manipulieren kann, die als Variableninhalt im Speicher verfügbar sind, aber nicht temporäre, die noch nicht zugewiesen sind.  
        
      Nein, PHP kann auch Arrays verarbeiten, die keiner Variable zugewiesen sind. Sonst könnte man ja keine Arrays als Funktionsergebenis zurückgeben. Noch nicht einmal erzeugen ($foo = array(...);) könnte man sie, denn eine Variablenzuweisung wird erst nach der Berechnung des rechten Ausdrucks vorgenommen, welcher erst einmal kurz in der Luft hängt.  
        
      Vielmehr liegt das Unvermögen im konkreten Fall an [shuffle()](http://de.php.net/manual/en/function.shuffle.php). Das Array muss als Referenz übergeben werden, weil es direkt geschüttelt wird und nicht nur eine geschüttelte Kopie als Rückgabewert zurückkommt. Stattdessen kommt ein Boolean und der kann nicht implodiert werden.  
        
        
      Lo!
      
  2. Hello,

    Warum kann ich

    $words = explode(",", $this->keywords);

    shuffle($words);
    return $result = implode(",", $words);

    
    >   
    > nicht zu  
    >   
    > `return $result = implode(",", shuffle(explode(",", $this->keywords)));`{:.language-php}  
    >   
    > zusammenfassen?  
      
    shuffle() ist keine Funktion mit Rückgabewert, sondern arbeitet über Referenz auf einem Originalobjekt vom Typ Array.  
      
    Für die Verschachtelung benötigst Du aber immer einen Rückgabewert, der dann von der nächsten "umfassenden Hülle", also nächst-äußeren Funktion, weiterverarbeitet wird.  
      
    Um es anders auszudrücken: Der Rückgabewert einer innerern Funktion wird zum Argument der äußeren Funktion. Es gibt immer nur genau eine äußere Funktion, kann aber mehrere innere geben.  
      
      
      
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>