Zasadniczo używam tej przydatnej funkcji do przetwarzania wierszy db (zwróć uwagę na PDO i / lub inne rzeczy)
function fetch($query,$func) {
$query = mysql_query($query);
while($r = mysql_fetch_assoc($query)) {
$func($r);
}
}
Dzięki tej funkcji mogę po prostu:
fetch("SELECT title FROM tbl", function($r){
//> $r['title'] contains the title
});
Powiedzmy, że teraz muszę połączyć wszystko $r['title']
w zmiennej (to tylko przykład).
Jak mogłem to zrobić? Myślałem o czymś takim, ale nie jest to zbyt eleganckie:
$result = '';
fetch("SELECT title FROM tbl", function($r){
global $result;
$result .= $r['title'];
});
echo $result;
early binding
. Jednak myślę, że w powyższym przykładzie, kiedyuse (&$result)
jest przekazywany przez odniesienie, to tak naprawdę nie ma znaczenia?use
jest wczesne wiązanie - jeśli masz na myśli obejście dla późnego wiązania - przekażesz zmiennąuse
przez odniesienie - używając&
=>use (&$result)
i zmień$result
zmienną przed wywołaniem funkcji anonimowej (lub czegoś, co ją wywołuje)A co z przepisaniem „fetch”, aby wywołać $ func tylko raz?
function fetch($query,$func) { $query = mysql_query($query); $retVal = array(); while($r = mysql_fetch_assoc($query)) { $retVal[] = $r; } $func($retVal); }
W ten sposób wywołałbyś $ func tylko raz i ponownie przetworzyłbyś tablicę po pobraniu? Nie jestem pewien co do wydajności, nawet jeśli wywołanie funkcji 200 razy nie wydaje się dobrym pomysłem.
źródło