Nieoczekiwane zakończenie skryptu wiąże się zazwyczaj z pojawieniem niezbyt estetycznego komunikatu o błędzie lub pustej strony (w przypadku ustawienia "display errors off"). Jeśli chcemy uniknąć takiej sytuacji możemy skorzystać z funkcji register_shutdown_function, która pozwala na przypisanie funkcji wywoływanej ilekroć nasz skrypt kończy działanie.
Aby wykryć czy skrypt zakończył się bez wystąpienia błędu wystarczy na jego początku przypisać dowolnej zmiennej wartość false zaś na samym końcu nadpisać jej wartość na true. Dzięki temu, wywoływana funkcja będzie mogła stwierdzić czy skrypt zakończył się zgodnie z wolą programisty. Poniższy przykład demonstruje użycie register_shutdown_function w celu wykrywania krytycznych błędów. Dla najlepszego efektu wizualnego najlepiej jest wyłączyć wyświetlanie błędów przez serwer.
<?php $bClean = false; function shutdown_func(){ global $bClean; if (!$bClean){ die("Nieoczekiwane zakonczenie skryptu"); } } register_shutdown_function('shutdown_func'); $a = 1; $a = new FooClass(); // spowoduje zakończenie skryptu z błędem krytycznym $bClean = true; $bClean = true; ?>
Jak widać, nasza funkcja "shutdown_func" wyświetla komunikat w momencie gdy zmienna $bClean nie ma wartości true. Dla własnych zastosowań, najlepiej jest opakować tą funkcję klasą i nie używać zmiennej globalnej. Jako przykład wykonania polecam EZ Components.
global $bClean;
Takich deklaracji unikamy jak ognia, oczywiście skrypt nie zadziała w defoultowej konfiguracji php5 w php6 globalsów nie przewidziano wcale :)
Oczywiście na końcu bloku kodu zabrakło $bClean = true;
Jeśli go nie będzie, to za każdym razem nam się komunikat wyświetli...