Autor Zpráva
Jan Zabloudil
Profil
Ahoj,
Chtěl jsem se zeptat jak funguje funkce handler (všude nacházím user_error_handler apod. - ale takto prostou ne)

Mám tady skript, který vypíše chybu v souboru :

<?php
function handler($typ, $zpráva, $soubor, $řádek) {
  switch ($typ) {
    case E_ERROR:
        echo '<h1>Závažná chyba</h1>';
        echo '<p>V souboru ' . $soubor . ' na řádku ' .
             $řádek . ' došlo ke kritické chybě.<br/>' . $zpráva . '.</p>';
        die();
        break;

    case E_WARNING:
        echo '<h1>Varování</h1>';
        echo '<p>V souboru ' . $soubor . ' na řádku ' . $řádek .
             ' došlo k méně závažné chybě.<br/>' . $zpráva . '.';
        break;

    case E_NOTICE:
        // Chyby tohoto typu nebudeme zobrazovat.
        break;
  }
}

// Nastavte obsluhu chyby.
set_error_handler('handler');

// Řetězec bude obsahovat chybně napsané slovo "Press" .
$řetězec = "Knihy nakladatelství Computer Perss jsou skvělé!";

/*
 * Pokuste se k nahrazení chybného podřetězce použít funkci
 * str_replace(). Tento pokus vyústí v chybu typu E_WARNING.
 * Důvodem je užití nesprávného počtu argumentů funkce.
 */
str_replace( "Perss", "Press" );
?>

Díky
Joker
Profil
Jan Zabloudil:
Co konkrétně na tom nechápete?
set_error_handler nastaví obsluhu chyb na uživatelskou funkci, která pak má obsluhu chyb zařídit.
V ukázce je obsluha chyb přesměrovaná na tu funkci handler.

Ještě poznamenám, že tak nejdou zachytit všechny chyby. Respektive to (celkem logicky) nefunguje na chyby, které neumožňují pokračovat ve zpracování skriptu. Takže podle mého názoru to case E_ERROR je v ukázce zbytečně, protože E_ERROR (fatální chyba) tím nepůjde zachytit.

Kdo to zamknul? Měl k tomu nějaký důvod? Zatím odemykám.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: