Depende mucho del contexto y la razón por la que desea que la función se llama sólo una vez.
Si su función está allí para inicializar algo o comenzar algo, su enfoque está bien. Otra cosa que podrías hacer, si estás inicializando algo, es probar si existe o no lo que quieres inicializar.
function initSomething() {
if (isSomethingInit()) return;
// Init Something
}
Si está utilizando aquellos función de devolución de llamada a algo, puede utilizar la declaración lambda en lugar de declarar una función. Esto asegurará que su función solo sea llamada desde ciertos lugares.
function somethingWithCallback($callback) {
$callback(5);
}
somethingWithCallback(function ($e) {echo $e;});
Bueno, para empezar, eso ni siquiera hará lo que quiere que haga, porque '$ foo_called' no existe en el ámbito de la función. Debería declararlo como una variable global dentro de la función para que este enfoque funcione. – Hammerite
@Hammerite: Eso es correcto. Cambié el código para abordar el problema del alcance. –