Skip to content

Conversation

dkulyk
Copy link

@dkulyk dkulyk commented Oct 21, 2025

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).

@dkulyk dkulyk requested a review from bukka as a code owner October 21, 2025 00:26
@dkulyk dkulyk marked this pull request as draft October 21, 2025 00:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant