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);
PHPOutput:
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) ""
}