[RFC Proposal] Add #[NoSerialize] attribute for excluding properties from serialization

From: Date: Sun, 05 Oct 2025 22:15:42 +0000
Subject: [RFC Proposal] Add #[NoSerialize] attribute for excluding properties from serialization
Groups: php.internals 
Request: Send a blank email to internals+get-128784@lists.php.net to get a copy of this message
This proposal introduces a new attribute, #[NoSerialize], that can be applied to class properties to explicitly exclude them from serialization when using PHP’s built-in serialization mechanisms. # Motivation When developing complex objects, it’s often necessary to exclude specific properties from serialization — for example, resources, closures, database connections, or transient caches. Currently, developers must manually implement __serialize() / __sleep() to filter these properties, which can lead to boilerplate code and potential maintenance errors. Adding a native attribute would provide a simple and declarative way to express this intention directly in code. ```php class Example { public string $name; #[NoSerialize] public $connection; // e.g., PDO, socket, or any transient resource } ``` When serialize($example) is called, $connection would be excluded automatically. # Benefits - Reduces boilerplate for common use cases. - Makes serialization intent explicit and self-documenting. - Simplifies framework and library code that relies on serialization # Implementation Sketch Internally, the engine could mark properties with a flag (e.g., ZEND_ACC_NO_SERIALIZE) during class compilation. During serialization, such properties would be skipped automatically unless overridden by user-defined serialization logic. Best regards, Dmytro Kulyk

« previous php.internals (#128784) next »