И третий пост подряд (сразу видно что я мало того что появился на работе, а даже открыл редактор!)
Сериализация в пхп работет быстро, но нечестно — при ансериализации сеттеры повторно не срабатывают.
class FRIENDSHIP_IS_MAGIC { private $Applejack; public function __set ( $key, $value ) { if ( $key != 'Applejack' ) { die ("Only Applejack you bastard!\n"); } if ( $value != '<3' ) { die ("No love -- no runtime!\n"); } $this->Applejack = $value; } public function __get ( $key ) { if ( $key != 'Applejack' ) { die ("Only Applejack you bastard!\n"); } return $this->Applejack; } } $pony = new FRIENDSHIP_IS_MAGIC(); $pony->Applejack = '<3'; // I LOVE YOU! var_dump($pony->Applejack); // string(2) "<3" $packed_pony = serialize($pony); $packed_pony = str_replace('s:2:"<3"', 'b:0', $packed_pony); // BLACK MAGIC $pony = unserialize($packed_pony); var_dump($pony->Applejack); // bool(false) -- WHERE IS MY LOVE ???
Конечно же тут я делают str_replace(), но в реальной жизни оно вполне себе может быть так что сначала засериализовали объект, сохранили в базу, а потом сеттер изменили и он уже валидирует иначе. Это беда на самом деле, прийдётся прикручивать какой-нибудь костыль.
2013.01.29 00:47