RFC: Allow __sleep() to return null or no value to delegate to default serialization #20252
+56
−15
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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).