En gros, j'utilise cette fonction pratique pour traiter les lignes de base de données (fermez un œil sur PDO et / ou d'autres choses)
function fetch($query,$func) {
$query = mysql_query($query);
while($r = mysql_fetch_assoc($query)) {
$func($r);
}
}
Avec cette fonction, je peux simplement faire:
fetch("SELECT title FROM tbl", function($r){
//> $r['title'] contains the title
});
Disons maintenant que j'ai besoin de tout concaténer $r['title']
dans un var (ce n'est qu'un exemple).
Comment pourrais-je faire ça? Je pensais à quelque chose comme ça, mais ce n'est pas très élégant:
$result = '';
fetch("SELECT title FROM tbl", function($r){
global $result;
$result .= $r['title'];
});
echo $result;
early binding
. Cependant, je suppose que dans l'exemple ci-dessus, quanduse (&$result)
est passé par référence, cela n'a pas vraiment d'importance?use
est une liaison anticipée - si vous voulez dire une solution de contournement pour une liaison tardive - vous passeriez la variableuse
par référence - en utilisant&
=>use (&$result)
et en modifiant la$result
variable avant d'appeler la fonction anonyme (ou quelque chose qui l'appelle)Pourquoi ne pas réécrire «fetch» pour appeler $ func une seule fois?
De cette façon, vous n'appeleriez $ func qu'une seule fois et re-traiteriez le tableau une fois extrait? Pas sûr de la performance même si appeler 200 fois une fonction ne semble pas être une bonne idée.
la source