Puoi annullare la logging di una function di spegnimento?

In PHP è ansible annullare la logging di una function (o di tutte le funzioni) configurata con register_shutdown_function() ?

Non credo che tu possa L'unico modo per annullare la logging di una function di callback è di racchiuderlo in una sorta di class che solo in realtà la chiama in base a determinate condizioni. Come questo pratico wrapper di funzioni:

 class UnregisterableCallback{ // Store the Callback for Later private $callback; // Check if the argument is callable, if so store it public function __construct($callback) { if(is_callable($callback)) { $this->callback = $callback; } else { throw new InvalidArgumentException("Not a Callback"); } } // Check if the argument has been unregistered, if not call it public function call() { if($this->callback == false) return false; $callback = $this->callback; $callback(); // weird PHP bug } // Unregister the callback public function unregister() { $this->callback = false; } } 

Utilizzo di base:

 $callback = new UnregisterableCallback(arrays($object, "myFunc")); register_shutdown_function(arrays($callback, "call")); 

Per annullare la logging

 $callback->unregister(); 

Ora, quando chiamato, restituirà false e non richiamerà la function di callback. Potrebbero esserci alcuni modi per semplificare questo process, ma funziona.

Uno dei modi per renderlo più snello sarebbe inserire la logging effettiva del callback in un metodo della function di callback, quindi il mondo esterno non deve sapere che il metodo che si deve passare a register_shutdown_function è "call".

Ciao ho apportto una leggera modifica al modo in cui la mia function ha funzionato come segue:

 function onDie(){ global $global_shutdown; if($global_shutdown){ //do shut down } } $global_shutdown = true; register_shutdown_function('onDie'); //do code stuff until function no longer needed. $global_shutdown = false;