Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

PHP5 __sleep To Handle Superclasses' Private Members

DZone's Guide to

PHP5 __sleep To Handle Superclasses' Private Members

·
Free Resource
PHP5 introduces visibility for object/class methods and data members.  This can prove problematic when serializing objects because base classes cannot see their parents' private vars, so these can't be serialized.  Plus, a base class probably doesn't know about all of its parents' private vars (even its public and protected ones).  So, I use this:



class Object {
    function __sleep() {
        return array_keys( (array)$this );
    }
}

class BaseClass extends Object {
    private $foo;
    private $dbh; // some resource, like a database handler
    function __sleep() {
        unset($this->dbh);
        return parent::__sleep();
    }
}

class SubClass extends BaseClass {
    private $bar;
    function __sleep() {
        return parent::__sleep();
    }
}



The point is, the subclasses do any local cleanup then delegate the actual __sleep request to a parent class.  With a common parent class Object that all other classes extend, we can keep the real serialize code in one place but still allow children to change their state before sleeping.
Topics:

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}