Zugriff auf die externen Variablen mit anonymen Funktion als Parameter
Im Grunde nutze ich diese praktische Funktion zur Verarbeitung von db-Zeilen (in der Nähe ein Auge auf PDO und/oder andere Sachen)
function fetch($query,$func) {
$query = mysql_query($query);
while($r = mysql_fetch_assoc($query)) {
$func($r);
}
}
Mit dieser Funktion kann ich das einfach tun:
fetch("SELECT title FROM tbl", function($r){
//> $r['title'] contains the title
});
Sagen jetzt brauche ich, um zu verketten alle $r['title']
in einem var (dies ist nur ein Beispiel).
Wie konnte ich das tun? Ich dachte, etwas wie dieses, aber es ist nicht sehr elegant:
$result = '';
fetch("SELECT title FROM tbl", function($r){
global $result;
$result .= $r['title'];
});
echo $result;
InformationsquelleAutor dynamic | 2011-12-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie
use
als beschrieben in docs:Code:
Aber Achtung (aus einem der Kommentare im vorherigen link):
Ja, natürlich, danke für den Hinweis it out 🙂
+1 für die Betonung der
early binding
. Aber ich denke, im obigen Beispiel, wennuse (&$result)
Verweis übergeben wird ist es nicht eigentlich egal?Ja, die Referenz wird hier verwendet, um bypass-Standard-Verhalten (frühe Bindung).
Die grundlegenden
use
ist frühen Bindung - wenn Sie meinen workaround für die späte Bindung - Sie würde übergeben Sie die variable durchuse
von Referenz - mit&
=>use (&$result)
und alter$result
variable vor dem Aufruf der anonymen Funktion (oder etwas, dass nennt)InformationsquelleAutor Xaerxess
Was das Neuschreiben 'fetch' zu nennen, $func-nur einmal ?
Diese Weise würden Sie das nennen $func nur einmal und re-Bearbeiten Sie das array einmal hergeholt?
Nicht sicher über die Leistung sogar tho aufrufen 200-mal eine Funktion nicht, Klang wie eine gute Idee.
Ja, du hast Recht. Jedoch, könnten Sie mit mysql_fetch_row() statt mysql_fetch_assoc() wenn Sie das interessiert, gewinnt ein paar ms hier und da... es ist nur furchtbar schwer zu behandeln wie Sie müssten, um zu wissen, die Spalten-position. By doing so, Sie gehen von 0.205 zu 0.180 über 2000 Anfragen von 30 Zeilen jeweils.
InformationsquelleAutor user103307