Funkce unserialize vracející false
Funkce unserialize může vrátit false ve dvou případech. Jednak v případě chyby a jednak při obnovování hodnoty false. Možná si řeknete, proč funkce nevrací hodnotu, která kolidovat nemůže. Důvod je ten, že funkce serialize je schopná uchovat v podstatě cokoliv, třeba i hodnotu null. Pro reportování chyb v této funkci by se báječně hodily výjimky, funkce se ale drží tradičního konceptu a vrací chybu typu E_NOTICE. Tuto chybu jde ošetřit několika způsoby:
<?php // využití proměnné $php_errormsg ini_set("track_errors", true); // povolení proměnné $php_errormsg $php_errormsg = ""; // vymazání případné předchozí chyby $original = unserialize($serialized); if ($php_errormsg) { // ošetření chyby } // použití funkce set_error_handler function error_handler($errno, $errstr) { // ošetření chyby } set_error_handler('error_handler'); $original = unserialize($serialized); restore_error_handler(); // šalamounské řešení $original = unserialize($serialized); if (false === $original && $serialized !== serialize(false)) { // ošetření chyby } ?>
Diskuse
dgx:
v šalamounském řešení by mělo být !== namísto != jinak bude podmínka splněna i tehdy, pokud $serialized = 0;

Jakub Vrána
:
Díky za upozornění, opravil jsem to.


Mordae:
Hmm, jako řešení pro možné hodnoty FALSE je to v pořádku, ale pokud bychom to používali ve "vlastní" deserializační metodě, bylo by to neúměrně náročné.Diskuse je zrušena z důvodu spamu.

