То, о чём молчит официальное руководство

APC (он же Alternative PHP Cache) — бесплатное расширение к PHP, предназначенное для оптимизации промежуточного кода и кэширования данных и компилированного байт-кода в разделяемой памяти.

Я заинтересовался APC с позиции его возможного применения в плагине WP File Cache, но при реализации модуля столкнулся с некоторыми особенностями (читай: ошибками), о которых документация умалчивает.

Пример 1.

[-]
View Code PHP
    $data = new stdClass();
    $data->int = 1;
    $data->string = "string";

    apc_store('test', $data);
    var_export(apc_fetch('test'));
    apc_delete('test');

Результат:

[-]
View Code Text
stdClass::__set_state(array( 'int' => 1, 'string' => 'string', ))

Теперь попробуем то же самое, но поместим объект в массив:

[-]
View Code PHP
    $data = new stdClass();
    $data->int = 1;
    $data->string = "string";

    $arr = array($data);
    apc_store('test', $arr);
    var_export(apc_fetch('test'));
    apc_delete('test');

Я ожидал что-то такое:

[-]
View Code Text
array ( 0 => stdClass::__set_state(array( 'int' => 1, 'string' => 'string', )), )

Получилось хуже:

[-]
View Code Text
array ( 0 => NULL, )

Как оказалось, APC не умеет проводить сериализацию объектов, если они обёрнуты в массивы. Обидно, я хотел сэкономить на дорогом вызове serialize().

Данная ошибка существует в APC 3.0.19. Эх…

Добавить в закладки

Связанные записи

6
Дек
2008

Комментарии к статье «Недокументированные особенности APC»  »

К статье «Недокументированные особенности APC» комментариев пока нет. Не хотите ли стать первым?

Подписаться на RSS-ленту комментариев к статье «Недокументированные особенности APC» Trackback URL: http://blog.sjinks.org.ua/php/429-undocumented-features-of-apc/trackback/

Оставить комментарий к записи «Недокументированные особенности APC»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя