Dopo l'uscita di PHP5.3 ora possiamo usare una chiusura e la parola chiave use
per aggirare il problema global
sollevata da Emil sopra:
$text = "item1,\nitem2,\nFINDME:23623,\nfoo1,\nfoo2,\nfoo3,\nFINDME:923653245,\nbar1,\nbar2,\nFINDME:43572342,\nbar3,\nbar4";
$pattern = '/FINDME:(\d+)/';
$count = 1;
$text = preg_replace_callback( $pattern
, function($match) use (&$count) {
$str = "Found match $count: {$match[1]}!";
$count++;
return $str;
}
, $text
);
echo "<pre>$text</pre>";
che restituisce:
item1,
item2,
Found match 1: 23623!,
foo1,
foo2,
foo3,
Found match 2: 923653245!,
bar1,
bar2,
Found match 3: 43572342!,
bar3,
bar4
Nota il use (&$count)
seguendo il nome della funzione - questo ci permette di leggere $count
nell'ambito della funzione (lo & lo rende passato per riferimento e quindi scrivibile dallo scope o f la funzione).
globale non ha più problemi che la soluzione oggetto troppo complicata. La gente si blocca su globals in PHP a causa dello stigmatismo C/C++/etc, che è fuori posto. Globali in PHP sono semplicemente variabili con ambito di richiesta. Meno torcere le mani, più pragmatismo. – cletus