在PHP 8.2中为Dynamic Properties are deprecated,从PHP 9开始将导致致命错误。
在运行PHP 8.2的 * 类 * 上使用 * 动态属性 * 将导致PHP Deprecated: Creation of dynamic property is deprecated
E_DEPRECATED警告。
现在,虽然在类中拥有公共/动态属性通常是一个糟糕的OO实践,* 但这个问题不是关于最佳OO实践,* 而是如何使使用动态属性的实际代码与PHP 8.2以上版本兼容。
如何使使用 * 动态属性 * 的实际代码基与新行为兼容?
1条答案
按热度按时间oprakyz71#
正如ADyson所建议的那样,解决方案是在 * 类定义 * 之上使用
#[AllowDynamicProperties]
* 属性 *。标记为#[AllowDynamicProperties]的类及其子类可以继续使用动态属性,而不会被弃用或删除。
对于有意不具有固定属性集的类,可以实现magic __get()/__台()或使用#[AllowDynamicProperties]属性标记类。使用#[AllowDynamicProperties]标记类与早期的PHP版本完全向后兼容,因为在PHP 8.0之前,这将被解释为注解,并且使用不存在的类作为属性不是错误。
这是一个完整的示例,包含在我创建的this github repository中,用于在 Traits 和 Extended Classes 上测试此特性