Grundsätzlich verwende ich diese praktische Funktion zum Verarbeiten von Datenbankzeilen (ein Auge auf PDO und / oder andere Dinge werfen)
function fetch($query,$func) {
$query = mysql_query($query);
while($r = mysql_fetch_assoc($query)) {
$func($r);
}
}
Mit dieser Funktion kann ich einfach:
fetch("SELECT title FROM tbl", function($r){
//> $r['title'] contains the title
});
Nehmen wir jetzt an, ich muss alles $r['title']
in einem var verketten (dies ist nur ein Beispiel).
Wie könnte ich das machen? Ich habe so etwas gedacht, aber es ist nicht sehr elegant:
$result = '';
fetch("SELECT title FROM tbl", function($r){
global $result;
$result .= $r['title'];
});
echo $result;
early binding
. Wie auch immer, im obigen Beispieluse (&$result)
ist es nicht wirklich wichtig, wann als Referenz übergeben wird?use
ist die frühe Bindung - wenn Sie eine Problemumgehung für die späte Bindung meinen - würden Sie die Variable alsuse
Referenz übergeben - mit&
=>use (&$result)
und die$result
Variable ändern , bevor Sie die anonyme Funktion (oder etwas, das sie aufruft)Was ist mit dem Umschreiben von 'fetch', um $ func nur einmal aufzurufen?
Auf diese Weise würden Sie $ func nur einmal aufrufen und das einmal abgerufene Array erneut verarbeiten? Ich bin mir nicht sicher über die Leistung, obwohl das 200-fache Aufrufen einer Funktion keine gute Idee ist.
quelle