Dwa sposoby na wykonanie funkcji jeden raz – osiągamy za pomocą closures (domknięcia), referencją oraz IIFE oraz za pomocą zmiennych statycznych funkcji.
Wersja ze 'static’:
<?php
function wykonajRaz() {
static $wykonana = false;
if (!$wykonana) {
$wykonana = true;
echo "do something\n";
}
}
// Wywołanie funkcji
wykonajRaz(); // Wyświetli "do something"
wykonajRaz(); // Nic się nie stanie (już wykonano)
?>
Wersja z closures, IIFE oraz przekazaniem przez referencję (podejście typowe dla JavaScript, gdzie nie mamy zmiennych statycznych, ale domknięcia już tak):
<?php
$something = (function() {
$executed = false;
return function() use (&$executed) {
if (!$executed) {
$executed = true;
echo "do something\n";
}
};
})();
$something(); // Wyświetli "do something"
$something(); // Nic się nie stanie (już wykonano)
Do następnego razu!