Perl example:
#!/usr/bin/perl
sub test_it {
my ($count) = @_;
return sub { ++$count; };
}
my $test1 = test_it(10);
my $test2 = test_it(50);
print $test1->(), "\n"; # 11
print $test2->(), "\n"; # 51
print $test1->(), "\n"; # 12
print $test2->(), "\n"; # 52
PHP distinguishes between read-only closures or read-write closures:
#!/usr/bin/php
<?php
function test_it_ro($count) {
return function() use($count) {
return ++$count;
};
}
function test_it_rw($count) {
return function() use(&$count) {
return ++$count;
};
}
$test1 = test_it_ro(10);
$test2 = test_it_ro(50);
print $test1()."\n"; // 11
print $test2()."\n"; // 51
print $test1()."\n"; // 11
print $test2()."\n"; // 51
$test1 = test_it_rw(10);
$test2 = test_it_rw(50);
print $test1()."\n"; // 11
print $test2()."\n"; // 51
print $test1()."\n"; // 12
print $test2()."\n"; // 52
?>