PHP: __sleep() Magic Method

The __sleep() magic method is related to the serialize() method. We use the serialize() method to generate a string that represents the object that is provided to the serialize() method.

The serialize() method is called in our code; it uses(triggers) the __sleep() magic method if available in the object.

Let’s define a class for analysing the case for __sleep().

NOTE

__wakeup() magic method is related to sleep.

__sleep() is called when we serialize, and __wakeup() is called when we unserialize.

Step #1:

<?php

class DatabaseHandler
{
    public function __construct(
        private string $dbHost, 
        private string $dbName, 
        private string $dbUser, 
        private string $dbPass
    ) {}

    public function connect(): PDO
    {
        $dsn = "mysql:host={$this->dbHost};dbname={$this->dbName}";
        try {
            $pdo = new PDO($dsn, $this->dbUser, $this->dbPass);
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            return $pdo;
        } catch (PDOException $e) {
            throw new Exception("Connection failed: " . $e->getMessage());
        }
    }

    public function executeQuery(string $query, array $params = []): array
    {
        $pdo = $this->connect();
        $stmt = $pdo->prepare($query);
        $stmt->execute($params);
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}


// Usage of DatabaseHandler
$dbHandler = new DatabaseHandler('localhost', 'test_db', 'root', '');
try {
    $results = $dbHandler->executeQuery("SELECT * FROM users WHERE age > :age", ['age' => 18]);
} catch (Exception $e) {
    // echo "Error: " . $e->getMessage();
}
PHP

NOTE

You can use any class for this. There is nothing special in the DatabaseHandler class.

Step #2:

$serializeDbHandler = serialize($dbHandler);

echo "Serialized DatabaseHandler: " . PHP_EOL;

var_dump($serializeDbHandler);


$unserializedDbHandler = unserialize($serializeDbHandler);

echo "Unserialized DatabaseHandler: " . PHP_EOL;

var_dump($unserializedDbHandler);
PHP

Output:

Serialized DatabaseHandler: 

string(199) "
  O:15:"DatabaseHandler":4:{
      s:23:"DatabaseHandlerdbHost"; s:9:"localhost";
      s:23:"DatabaseHandlerdbName"; s:7:"test_db";
      s:23:"DatabaseHandlerdbUser"; s:4:"root";
      s:23:"DatabaseHandlerdbPass"; s:0:"";
  }
"


Unserialized DatabaseHandler: 

object(DatabaseHandler)#3 (4) {
  ["dbHost":"DatabaseHandler":private]=>
  string(9) "localhost"
  ["dbName":"DatabaseHandler":private]=>
  string(7) "test_db"
  ["dbUser":"DatabaseHandler":private]=>
  string(4) "root"
  ["dbPass":"DatabaseHandler":private]=>
  string(0) ""
}

Leave a Comment


The reCAPTCHA verification period has expired. Please reload the page.