Functions That Can Be Called Only Once

I used the following approach:

$foo_called = false;

function foo()
{
    if($foo_called)
    {
        return;
    }

    $foo_called = true;

    // do something.
}

I was wondering if there are better / different approaches.

+5
source share
6 answers

Just for clarity, I would do something like this:

function foo()
{
    static $foo_called = false;
    if (!$foo_called) {
        $foo_called = true;
        // etc.
    }
}
+8
source

You can use a static variable :

function foo() {
    static $foo_called = false;
    if ($foo_called) return;

    $foo_called = true;

    // do something.
}
+3
source

singleton pattern?

" Singleton , . . .

+1

. . , global, .

+1

, .

, - - , . , , - , - , , , .

function initSomething() {
    if (isSomethingInit()) return;

    // Init Something
}

-, . , .

function somethingWithCallback($callback) {
    $callback(5);
}

somethingWithCallback(function ($e) {echo $e;});
+1

, , .

$triggered = false;
$trigger = function($callback)use(&$triggered){
    if(!$triggered){
        $callback();
            $triggered = true;
    }
};

foreach(['Hello','World', 'Wuhuu!'] as $value) {
    $value = ' ' . $value;

    $trigger(function()use(&$value){    // will only run once
        $value = trim($value);
    });

    echo $value;
}
0

All Articles