1

SplFileObject をシリアル化しようとしていますが、これは 5.2 でサイレントに失敗し、5.3 で致命的なエラーをスローします。これまでのところ、SplFileObject をサブクラス化し、(簡略化された) 次のコードを使用して Serializable インターフェイスを実装することで、5.2 の問題を修正しました (完全なバージョンでは $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 はそれについてあまり知らないようです。そのため、5.3 で SplFileObject をシリアル化することさえ可能かどうか疑問に思っています。

更新:その質問には答えがないようです(私のコメントを参照)。

4

1 に答える 1

0

どうやら、シリアル化することは許可されていません。cliモードでテストされ、これが私が持っているものです:

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

リソース (mysql 接続、ファイル ハンドラー) をシリアル化できず、SplFileObjectすべてファイル リソースに基づいていることを考えると、それほど迷うことはありません。

于 2011-03-17T09:52:36.840 に答える