Question

I'm trying to serialize a SplFileObject, which fails silently in 5.2 and throws a fatal in 5.3. So far, I've fixed the problem in 5.2 by subclassing SplFileObject and implementing the Serializable interface using the (simplified) following code (full version also handles $open_mode and $context but that's not relevant to that question):

<?php

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

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

but 5.3 still throws a fatal:

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

I also tried adding magic __sleep and __wakeup methods, to no avail.

Google doesn't seem to know much about that, so I'm left wondering if it's even possible to serialize an SplFileObject in 5.3.

UPDATE: seems like that question doesn't have an answer (cf my comment).

Was it helpful?

Solution

Apparently you're not allowed to serialize it. Tested in cli mode and this is what I've got:

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

Not much wandering considering that resources (mysql connection, file handlers) cannot be serialized, and SplFileObject is all based around a file resource.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top