И третий пост подряд (сразу видно что я мало того что появился на работе, а даже открыл редактор!)
Сериализация в пхп работет быстро, но нечестно — при ансериализации сеттеры повторно не срабатывают.
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