RFC: Allow __sleep() to return null or no value to delegate to default serialization#20252
Draft
dkulyk wants to merge 5 commits into
Draft
RFC: Allow __sleep() to return null or no value to delegate to default serialization#20252dkulyk wants to merge 5 commits into
dkulyk wants to merge 5 commits into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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).