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!