How can the scope of an object be preserved during serialization in PHP?

When serializing an object in PHP, its scope (private, protected, public) is not preserved by default. To preserve the scope of an object during serialization, you can implement the Serializable interface and define custom methods for serialization and unserialization. By doing so, you can control which properties are serialized and how they are accessed.

class MyClass implements Serializable {
    private $privateProperty = 'private';
    protected $protectedProperty = 'protected';
    public $publicProperty = 'public';

    public function serialize() {
        return serialize([
            'privateProperty' => $this->privateProperty,
            'protectedProperty' => $this->protectedProperty,
            'publicProperty' => $this->publicProperty
        ]);
    }

    public function unserialize($data) {
        $data = unserialize($data);
        $this->privateProperty = $data['privateProperty'];
        $this->protectedProperty = $data['protectedProperty'];
        $this->publicProperty = $data['publicProperty'];
    }
}

$obj = new MyClass();
$serializedObj = serialize($obj);
$unserializedObj = unserialize($serializedObj);

var_dump($unserializedObj);