public
Description: Library that provides the low-level functionality to store ("freeze") and retrieve ("thaw") PHP objects from an object store.
Homepage:
Clone URL: git://github.com/sebastianbergmann/php-object-freezer.git
name age message
file .gitignore Thu Oct 22 10:00:57 -0700 2009 Add Ant build script. [sebastianbergmann]
directory Object/ Wed Oct 14 10:42:18 -0700 2009 Fix CS. [sebastianbergmann]
file README.markdown Wed Sep 23 12:42:50 -0700 2009 Close #1. [sebastianbergmann]
directory Tests/ Sat May 30 10:39:40 -0700 2009 Simplify. [sebastianbergmann]
file build.xml Fri Oct 23 06:39:29 -0700 2009 Improve portability. [sebastianbergmann]
file package.xml Sat May 30 02:36:25 -0700 2009 Bump PEAR requirement. [sebastianbergmann]
file phpunit.xml.dist Wed Jul 29 22:30:59 -0700 2009 Add <testsuite> configuration. [sebastianbergmann]
README.markdown

Object_Freezer

This class provides the low-level functionality required to store ("freeze") PHP objects to and retrieve ("thaw") PHP objects from an object store.

Object_Freezer::freeze()

Freezes an object.

In the example below, we freeze an object of class A. As this object aggregates an object of class B, the object freezer has to freeze two objects in total.

<?php
require_once 'Object/Freezer.php';

class A
{
    protected $b;

    public function __construct()
    {
        $this->b = new B;
    }
}

class B
{
    protected $foo = 'bar';
}

$freezer = new Object_Freezer;
var_dump($freezer->freeze(new A));
?>

Below is the output of the code example above.

array(2) {
  ["root"]=>
  string(36) "32246c35-f47b-4fbc-a2ad-ed14e520865e"
  ["objects"]=>
  array(2) {
    ["32246c35-f47b-4fbc-a2ad-ed14e520865e"]=>
    array(3) {
      ["className"]=>
      string(1) "A"
      ["isDirty"]=>
      bool(true)
      ["state"]=>
      array(2) {
        ["b"]=>
        string(57) "__php_object_freezer_3cd682bf-8eba-4fec-90e2-ebe98aa07ab7"
        ["__php_object_freezer_hash"]=>
        string(40) "8b80da9c38c0c41c829cbbefbca9b18aa67ff607"
      }
    }
    ["3cd682bf-8eba-4fec-90e2-ebe98aa07ab7"]=>
    array(3) {
      ["className"]=>
      string(1) "B"
      ["isDirty"]=>
      bool(true)
      ["state"]=>
      array(2) {
        ["foo"]=>
        string(3) "bar"
        ["__php_object_freezer_hash"]=>
        string(40) "e04e935f09f2d526258d8a16613c5bce31e84e87"
      }
    }
  }
}

If the object has not been frozen before, the attribute __php_object_freezer_uuid will be added to it.

The reference to the object of class B that the object of class A had before it was frozen has been replaced with the UUID of the frozen object of class B (__php_object_freezer_3cd682bf-8eba-4fec-90e2-ebe98aa07ab7).

The result array's root element contains the UUID for the now frozen object of class A (32246c35-f47b-4fbc-a2ad-ed14e520865e).

Object_Freezer::thaw()

Thaws an object.

<?php
require_once 'Object/Freezer.php';

require_once 'A.php';
require_once 'B.php';

$freezer = new Object_Freezer;

var_dump(
  $freezer->thaw(
    array(
      'root'    => '32246c35-f47b-4fbc-a2ad-ed14e520865e',
      'objects' => array(
        '32246c35-f47b-4fbc-a2ad-ed14e520865e' => array(
          'className' => 'A',
          'isDirty'   => FALSE,
          'state'     => array(
            'b' => '__php_object_freezer_3cd682bf-8eba-4fec-90e2-ebe98aa07ab7',
          ),
        ),
        '3cd682bf-8eba-4fec-90e2-ebe98aa07ab7' => array(
          'className' => 'B',
          'isDirty'   => FALSE,
          'state'     => array(
            'foo' => 'bar',
          )
        )
      )
    )
  )
);
?>

Below is the output of the code example above.

object(A)#3 (2) {
  ["b":protected]=>
  object(B)#5 (2) {
    ["foo":protected]=>
    string(3) "bar"
    ["__php_object_freezer_uuid"]=>
    string(36) "3cd682bf-8eba-4fec-90e2-ebe98aa07ab7"
  }
  ["__php_object_freezer_uuid"]=>
  string(36) "32246c35-f47b-4fbc-a2ad-ed14e520865e"
}

Object_Freezer_Storage_CouchDB

This class provides the means to use CouchDB as an object storage.

<?php
require_once 'Object/Freezer/Storage/CouchDB.php';

class A
{
    protected $b;

    public function __construct()
    {
        $this->b = new B;
    }
}

class B
{
    protected $foo = 'bar';
}

$storage = new Object_Freezer_Storage_CouchDB(
  'database', NULL, NULL, TRUE, 'localhost', 5984
);

$id = $storage->store(new A);

var_dump($storage->fetch($id));
?>

Below is the output of the code example above.

object(A)#3 (2) {
  ["b":protected]=>
  object(B)#5 (2) {
    ["foo":protected]=>
    string(3) "bar"
    ["__php_object_freezer_uuid"]=>
    string(36) "3cd682bf-8eba-4fec-90e2-ebe98aa07ab7"
  }
  ["__php_object_freezer_uuid"]=>
  string(36) "32246c35-f47b-4fbc-a2ad-ed14e520865e"
}