Как сериализовать SplFileObject с помощью PHP 5.3? - PullRequest
1 голос
/ 17 марта 2011

Я пытаюсь сериализовать SplFileObject, который молча терпит неудачу в 5.2 и выдает фатальный в 5.3. До сих пор я исправил проблему в 5.2 путем создания подкласса SplFileObject и реализации интерфейса Serializable с использованием (упрощенного) следующего кода (полная версия также обрабатывает $ open_mode и $ context, но это не относится к этому вопросу):

<?php

class SerializableFileObject extends SplFileObject implements Serializable
{
  public function serialize()
  {
    return $this->getRealPath();
  }

  public function unserialize($serialized)
  {
    $this->__construct($serialized);
  }
}

но 5.3 все равно бросает смертельное:

PHP Fatal error:  Class SerializableFileObject could not implement interface Serializable in Unknown on line 0

Я также пытался добавить магические методы __sleep и __wakeup, но безрезультатно.

Похоже, Google мало что знает об этом, поэтому мне интересно, можно ли вообще сериализовать SplFileObject в 5.3.

ОБНОВЛЕНИЕ: похоже, что на этот вопрос нет ответа (см. Мой комментарий).

1 Ответ

0 голосов
/ 17 марта 2011

Видимо вам не разрешено сериализовать его.Протестировано в режиме cli, и вот что у меня получилось:

Warning: Uncaught exception 'Exception' with message 'Serialization of 'SplFileObject' is not allowed' in php shell code:1

Не так много блужданий, учитывая, что ресурсы (соединение mysql, обработчики файлов) не могут быть сериализованы, а SplFileObject все основано на файловом ресурсе..

...