dkulyk · GitHub

Copy link Copy Markdown

RFC https://wiki.php.net/rfc/sleep_without_return_array

This PR implements the RFC: Allow __sleep() to return null or no value to delegate to default serialization.
It refines the behavior of the __sleep() magic method by making it a pre-serialization lifecycle hook rather than a serialization controller.

Key changes
• __sleep() may now return null or no value (void):
The engine will execute side effects and then perform default serialization as if __sleep() were not defined.
• Invalid return types:
Emit a warning and fall back to default serialization (previously serialized as NULL).
• Backward compatibility:
Low impact. Classes that relied on silent NULL serialization can explicitly use the proposed #[NoSerialize] attribute (see related RFC).
• Updated error message:
Clarified diagnostic text for invalid return types.

Motivation

This change limits __sleep() to a single responsibility — preparing an object for serialization —
while moving property filtering and serialization control to declarative attributes like #[NoSerialize] and #[NotSerializable] (under separate RFCs).

Read the original on github.com ↗