<?php
function createCounter()
{ $counter=0;
return function()
{
static $counter = 0;
$counter++;
return $counter;
};
}
$c1 = createCounter(); // создаем первый счетчик
echo $c1() . "\n"; // выводит 1
echo $c1() . "\n"; // выводит 2
echo $c1() . "\n"; // выводит 3
$c2 = createCounter(); // создаем вторую независимую функцию-счетчик
echo $c2() . "\n"; // выводит 1
echo $c2() . "\n"; // выводит 2
// при этом первая функция-счетчик тоже работает:
echo $c1() . "\n"; // выводит 4
echo $c1() . "\n"; // выводит 5
PD9waHAKZnVuY3Rpb24gY3JlYXRlQ291bnRlcigpCnsgJGNvdW50ZXI9MDsKICAgIHJldHVybiBmdW5jdGlvbigpCiAgICB7CiAgICAgICBzdGF0aWMgJGNvdW50ZXIgPSAwOwogICAgICAgICRjb3VudGVyKys7CiAgICAgICAgcmV0dXJuICRjb3VudGVyOwogICAgfTsKICAgIAp9CiRjMSA9IGNyZWF0ZUNvdW50ZXIoKTsgLy8g0YHQvtC30LTQsNC10Lwg0L/QtdGA0LLRi9C5INGB0YfQtdGC0YfQuNC6CmVjaG8gJGMxKCkgLiAiXG4iOyAvLyDQstGL0LLQvtC00LjRgiAxCmVjaG8gJGMxKCkgLiAiXG4iOyAvLyDQstGL0LLQvtC00LjRgiAyCmVjaG8gJGMxKCkgLiAiXG4iOyAvLyDQstGL0LLQvtC00LjRgiAzCiRjMiA9IGNyZWF0ZUNvdW50ZXIoKTsgLy8g0YHQvtC30LTQsNC10Lwg0LLRgtC+0YDRg9GOINC90LXQt9Cw0LLQuNGB0LjQvNGD0Y4g0YTRg9C90LrRhtC40Y4t0YHRh9C10YLRh9C40LoKZWNobyAkYzIoKSAuICJcbiI7IC8vINCy0YvQstC+0LTQuNGCIDEKZWNobyAkYzIoKSAuICJcbiI7IC8vINCy0YvQstC+0LTQuNGCIDIKLy8g0L/RgNC4INGN0YLQvtC8INC/0LXRgNCy0LDRjyDRhNGD0L3QutGG0LjRjy3RgdGH0LXRgtGH0LjQuiDRgtC+0LbQtSDRgNCw0LHQvtGC0LDQtdGCOgplY2hvICRjMSgpIC4gIlxuIjsgLy8g0LLRi9Cy0L7QtNC40YIgNAplY2hvICRjMSgpIC4gIlxuIjsgLy8g0LLRi9Cy0L7QtNC40YIgNSA=