Verschachteln von PHP-Funktionen
Bobby
- php
0 Der Martin0 Tom
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
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:(
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
Moin
naja zumindest so kann ichs halbwegs zusammenfassen:
shuffle(($words=explode(",",$this->keywords)));
return implode(",", $words);
wenigstens etwas.
Gruß Bobby
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!
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>