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