Jet\Debug_ErrorHandler
Základní třída pro handlery - moduly pro správu chyb. Její hlavní smysl je držet seznam registrovaných handlerů, zachytávat PHP chyby a zachytávat nezachycené výjimky (a další věci - vize seznam metod). Jedná se o středobod subsystému ErrorHandler.
Metoda | Význam |
---|---|
static registerHandler( Debug_ErrorHandler_Handler $handler ): void |
Zaregistruje handler (instanci třídy, která dědí od abstraktní třídy Jet\Debug_ErrorHandler_Handler) POZOR! Tato metoda se v praxi při inicializaci nepoužívá. Hadler má statickou metodu register(), která se postará o registraci handleru. |
static unRegisterHandler( string $name ): void |
Odregistruje daný error handler. |
static getHandler( string $name ): Debug_ErrorHandler_Handler|null |
Vrátí instanci handleru podle jeho názvu - pokud je registrován. Pokud není, pak vrátí null. |
static getRegisteredHandlers(): Debug_ErrorHandler_Handler[] | Vrátí seznam všech registrovaných handlerů. |
initialize(): void | Inicializace subsystému. |
static handleError( int $code, string $message, string $file = '', int $line = 0 ): void |
Stará se o zachycení PHP chyb. |
static handleException( Throwable $exception ): void |
Metoda se stará o zachycení nezachycených výjimek. |
static getLastError(): Debug_ErrorHandler_Error|null | Vrátí instanci poslední zaznamenané chyby. |
static addIgnoreNonFatalErrorsPath( string $path ): void |
Občas je nutné potlačit nezávažná chybová hlášení typu notice, warning a podobně. Tedy obecně to dobrý nápad není, každému problému by měla být věnována patřičná péče. Proto má také Jet ve výchozím stavu plně zapnutý error reporting. Ale svět není dokonalé místo :-) Občas jinou možnost nemáte (např. při integraci knihovny / komponenty třetí strany). Pak je tu ještě ten fakt, že silence operátor (@) není možné v PHP8 spolehlivě a vždy správně detekovat. Z toho důvodu existuje možnost nastavit ErrorHandler tak že má nezávažné chyby (warning, notice) v určitých adresářích ignorovat. K čemu je to dobré? Dvě situace:
K tomu slouží tato statická metoda a vy si můžete zaregistrovat adresáře dle libosti a potřeb. Jen by asi nebylo dobré zaregistorvat například celý adresář application :-) |
static getIgnoreNonFatalErrorsPaths( ) : array |
Viz addIgnoreNonFatalErrorsPath. Vrátí seznam registrovaných adresářů. |
static doItSilent ( callable $operation ) : array |
Opět problematika potlačení chybového hlášení. Může se stát, že několik faktorů bude působit proti sobě. Jet aplikace má být nastavena tak, že zobrazuje / loguje každou chybu - i pouhé varování. Na druhou stranu některé funkce PHP mohou stále varování generovat. Ovšem potřebujeme je použít i v situaci, kdy varování generují, ale rozhodně nechceme tato očekávaná varování zaznamenávat do logu a už vůbec ne zobrazovat. Bohužel silent operátor (@) se v PHP8 nedá detekovat jak tomu bylo možné dříve. Tedy není možné jej efektivně použít i když by se to opravdu hodilo. Řešení je udělat to například takto:
$cached_data = Debug_ErrorHandler::doItSilent(function() use ($cached_data) {
|