From e2c6f8c82ae303fc952db16d10c13d02924e87d5 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Tue, 11 Oct 2022 14:58:03 +0000 Subject: [PATCH] Code Modernization: Add `AllowDynamicProperties` attribute to recently introduced classes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit is a follow-up to [54133] for new classes introduced in WordPress 6.1 since the previous commit. Dynamic (non-explicitly declared) properties are deprecated as of PHP 8.2 and are expected to become a fatal error in PHP 9.0. There are a number of ways to mitigate this: * If it is an accidental typo for a declared property: fix the typo. * For known properties: declare them on the class. * For unknown properties: add the magic `__get()`, `__set()`, et al. methods to the class or let the class extend `stdClass` which has highly optimized versions of these magic methods built in. * For unknown ''use'' of dynamic properties, the `#[AllowDynamicProperties]` attribute can be added to the class. The attribute will automatically be inherited by child classes. Trac ticket #56034 is open to investigate and handle the third and fourth type of situations, however it has become clear this will need more time and will not be ready in time for WP 6.1. To reduce “noise” in the meantime, both in the error logs of WP users moving onto PHP 8.2, in the test run logs of WP itself, in test runs of plugins and themes, as well as to prevent duplicate tickets from being opened for the same issue, the `#[AllowDynamicProperties]` attribute has been added to all “parent” classes in WP. Reference: [https://wiki.php.net/rfc/deprecate_dynamic_properties PHP RFC: Deprecate dynamic properties]. Follow-up to [53922], [54133]. Props jrf. See #56513, #56034. git-svn-id: https://develop.svn.wordpress.org/trunk@54481 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-theme-json-data.php | 1 + .../style-engine/class-wp-style-engine-css-declarations.php | 1 + src/wp-includes/style-engine/class-wp-style-engine-css-rule.php | 1 + .../style-engine/class-wp-style-engine-css-rules-store.php | 1 + src/wp-includes/style-engine/class-wp-style-engine-processor.php | 1 + src/wp-includes/style-engine/class-wp-style-engine.php | 1 + 6 files changed, 6 insertions(+) diff --git a/src/wp-includes/class-wp-theme-json-data.php b/src/wp-includes/class-wp-theme-json-data.php index 089e65eddb..9ffa2f3585 100644 --- a/src/wp-includes/class-wp-theme-json-data.php +++ b/src/wp-includes/class-wp-theme-json-data.php @@ -10,6 +10,7 @@ /** * Class to provide access to update a theme.json structure. */ +#[AllowDynamicProperties] class WP_Theme_JSON_Data { /** diff --git a/src/wp-includes/style-engine/class-wp-style-engine-css-declarations.php b/src/wp-includes/style-engine/class-wp-style-engine-css-declarations.php index 0b9eb59a15..23efd6a40c 100644 --- a/src/wp-includes/style-engine/class-wp-style-engine-css-declarations.php +++ b/src/wp-includes/style-engine/class-wp-style-engine-css-declarations.php @@ -16,6 +16,7 @@ * * @since 6.1.0 */ +#[AllowDynamicProperties] class WP_Style_Engine_CSS_Declarations { /** diff --git a/src/wp-includes/style-engine/class-wp-style-engine-css-rule.php b/src/wp-includes/style-engine/class-wp-style-engine-css-rule.php index 6e53418121..53225d7d65 100644 --- a/src/wp-includes/style-engine/class-wp-style-engine-css-rule.php +++ b/src/wp-includes/style-engine/class-wp-style-engine-css-rule.php @@ -16,6 +16,7 @@ * * @since 6.1.0 */ +#[AllowDynamicProperties] class WP_Style_Engine_CSS_Rule { /** diff --git a/src/wp-includes/style-engine/class-wp-style-engine-css-rules-store.php b/src/wp-includes/style-engine/class-wp-style-engine-css-rules-store.php index 9b1ed7e706..235fe53e92 100644 --- a/src/wp-includes/style-engine/class-wp-style-engine-css-rules-store.php +++ b/src/wp-includes/style-engine/class-wp-style-engine-css-rules-store.php @@ -16,6 +16,7 @@ * * @since 6.1.0 */ +#[AllowDynamicProperties] class WP_Style_Engine_CSS_Rules_Store { /** diff --git a/src/wp-includes/style-engine/class-wp-style-engine-processor.php b/src/wp-includes/style-engine/class-wp-style-engine-processor.php index 8e035b59ee..241437b204 100644 --- a/src/wp-includes/style-engine/class-wp-style-engine-processor.php +++ b/src/wp-includes/style-engine/class-wp-style-engine-processor.php @@ -16,6 +16,7 @@ * * @since 6.1.0 */ +#[AllowDynamicProperties] class WP_Style_Engine_Processor { /** diff --git a/src/wp-includes/style-engine/class-wp-style-engine.php b/src/wp-includes/style-engine/class-wp-style-engine.php index c6554c5dd9..951dac4b54 100644 --- a/src/wp-includes/style-engine/class-wp-style-engine.php +++ b/src/wp-includes/style-engine/class-wp-style-engine.php @@ -21,6 +21,7 @@ * @access private * @since 6.1.0 */ +#[AllowDynamicProperties] final class WP_Style_Engine { /** * Style definitions that contain the instructions to