WordPress/wp-admin
hellofromTonya 50274fbc2b Code Modernization: Deprecate dynamic properties in WP_List_Table magic methods.
The unknown use of unknown dynamic property within the `WP_List_Table` property magic methods is now deprecated. A descriptive deprecation notice is provided to alert developers to declare the property on the child class extending `WP_List_Table`.

Changes in this commit:
* Adds a deprecation notice to the `__get()`, `__set()`, `__isset()`, `__unset()` magic methods, i.e. to alert and inform developers when attempting to get/set/isset/unset a dynamic property.
* Fixes `__get()` to explicitly returns `null` when attempting to get a dynamic property.
* Removes returning the value when setting a declared property, as (a) unnecessary and (b) `__set()` should return `void` [https://www.php.net/manual/en/language.oop5.overloading.php#object.set per the PHP handbook].
* Adds unit tests for happy and unhappy paths.

For backward compatibility, no changes are made to the internal declared properties listed in `$compat_fields` and accessed through the magic methods. 

For example:
A child class uses a property named `$data` that is not declared / defined as a property on the child class. When getting its value, e.g. `$list_table->data`, the `WP_List_Table::__get()` magic method is invoked, the following deprecation notice thrown, and `null` returned:

>The property `data` is not defined. Setting a dynamic (undefined) property is deprecated since version 6.4.0! Instead, define the property on the class.

=== Why not remove the magic methods, remove the `$compat_fields` property, and restore the properties `public`?

tl;dr Backward compatibility.

Several plugins, one of which has over 5M installs, add a property to the `$compat_fields` array. Removing the property would cause an `Undefined property` `Warning` (PHP 8) | `Notice` (PHP 7) to be thrown. Removing the associated code would change the functionality.

=== Why not limit the deprecation for PHP versions >= 8.2?

tl;dr original design intent and inform

The magic methods and `$compat_fields` property were added for one purpose: to continue providing external access to internal properties declared on `WP_List_Table`. They were not intended to be used for dynamic properties.

Deprecating that unintended usage both alerts developers a change is needed in their child class and informs them what to change.

References: 
* Dynamic (non-explicitly declared) properties are deprecated as of PHP 8.2 and are expected to become a fatal error in PHP 9.0.
* A [https://www.youtube.com/live/vDZWepDQQVE?feature=share&t=10097 live open public working session] where these changes were discussed and agreed to.
* [https://wiki.php.net/rfc/deprecate_dynamic_properties PHP RFC: Deprecate dynamic properties.]

Related to #14579, #22234, #30891.

Follow-up to [15491], [28493], [28521], [28524], [31146].

Props antonvlasenko, jrf, markjaquith, hellofromTonya, SergeyBiryukov, desrosj, peterwilsoncc, audrasjb, costdev, oglekler, jeffpaul.
Fixes #58896.
See #56034.
Built from https://develop.svn.wordpress.org/trunk@56349


git-svn-id: http://core.svn.wordpress.org/trunk@55861 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-08-02 18:37:21 +00:00
..
css Help/About: Add images to About page, match header style to images. 2023-08-01 15:04:22 +00:00
images Help/About: Updates to About page. 2023-07-24 23:39:22 +00:00
includes Code Modernization: Deprecate dynamic properties in WP_List_Table magic methods. 2023-08-02 18:37:21 +00:00
js External Libraries: Update deprecated jQuery code in Farbtastic lib. 2023-07-17 22:03:26 +00:00
maint Coding Standards: Use strict comparison in wp-admin/maint/repair.php. 2023-04-11 16:30:22 +00:00
network Help/About: Fix the Get Involved tab on Network Admin. 2023-07-25 21:34:27 +00:00
user
about.php Help/About: Add images to About page, match header style to images. 2023-08-01 15:04:22 +00:00
admin-ajax.php Coding Standards: Remove extra space in wp-admin/admin-ajax.php. 2022-05-07 16:21:18 +00:00
admin-footer.php Coding Standards: Simplify a condition in wp-admin/admin-footer.php. 2021-06-01 11:30:57 +00:00
admin-functions.php
admin-header.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 14:08:18 +00:00
admin-post.php Administration: Require a valid action parameter to be set for admin-ajax.php requests. 2022-03-02 15:00:11 +00:00
admin.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 14:08:18 +00:00
async-upload.php Media: Remove target blank attribute from media uploader edit links. 2022-01-27 22:17:00 +00:00
authorize-application.php Docs: Various corrections and improvements to inline documentation. 2022-08-04 14:52:11 +00:00
comment.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
contribute.php Help/About: Escape "Contribute" links, for better consistency. 2023-08-01 12:58:22 +00:00
credits.php Help/About: Escape "Contribute" links, for better consistency. 2023-08-01 12:58:22 +00:00
custom-background.php
custom-header.php
customize.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 14:08:18 +00:00
edit-comments.php General: Replace some instances of "blog" with "site" in documentation, translator comments, and user-facing text strings. 2023-06-19 18:27:27 +00:00
edit-form-advanced.php Help/About: Avoid extra redirections on HelpHub Links. 2023-02-23 11:06:19 +00:00
edit-form-blocks.php Editor: Fix layout of no-js state in site editor. 2023-07-10 21:22:21 +00:00
edit-form-comment.php I18N: Mark screen reader strings as such with translator comments. 2023-02-07 17:10:21 +00:00
edit-link-form.php Coding Standards: Use esc_url() to escape link URL value in wp-admin/edit-link-form.php. 2023-05-11 15:05:22 +00:00
edit-tag-form.php Networks and Sites: Officially remove global terms. 2022-09-20 02:51:09 +00:00
edit-tags.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
edit.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
erase-personal-data.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
export-personal-data.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
export.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 14:08:18 +00:00
freedoms.php Help/About: Updates to About page. 2023-07-24 23:39:22 +00:00
import.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
index.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 14:08:18 +00:00
install-helper.php Docs: Fix typo and improve DocBlock formatting in wp-admin/install-helper.php. 2022-11-20 14:10:15 +00:00
install.php Upgrade/Install: Add aria-describedby for input descriptions. 2023-06-25 18:44:23 +00:00
link-add.php Docs: Add a comment about the $title global usage in various admin files. 2021-07-22 13:53:00 +00:00
link-manager.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
link-parse-opml.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 14:08:18 +00:00
link.php Coding Standards: Apply some alignment fixes from composer format. 2021-07-27 19:01:59 +00:00
load-scripts.php Docs: Update a comment in wp-admin/load-styles.php per the documentation standards. 2021-12-12 14:52:02 +00:00
load-styles.php Database: Replace str_contains() and str_ends_with() usage in wpdb methods. 2023-06-23 12:17:24 +00:00
media-new.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
media-upload.php Docs: Add examples of possible names for various hooks whose name contains a dynamic portion. 2021-03-07 12:32:09 +00:00
media.php Media: Redirect deprecated wp-admin/media.php file. 2023-06-19 23:20:21 +00:00
menu-header.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:56:23 +00:00
menu.php Editor: Fix conditionals in Template Editing Mode. 2023-07-25 14:33:23 +00:00
moderation.php
ms-admin.php
ms-delete-site.php Text Changes: Improve the wording of the email sent to confirm site deletion. 2022-11-14 21:57:10 +00:00
ms-edit.php
ms-options.php
ms-sites.php
ms-themes.php
ms-upgrade-network.php
ms-users.php
my-sites.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 14:08:18 +00:00
nav-menus.php Administration: Define the $title global on the Menus screen for classic themes. 2023-03-15 09:05:22 +00:00
network.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
options-discussion.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
options-general.php I18n: Move translator comments inside sprintf for tagline field description. 2023-07-11 05:55:20 +00:00
options-head.php Administration: Replace legacy updated message type in add_settings_error() calls with success. 2019-08-16 00:39:55 +00:00
options-media.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
options-permalink.php Code Modernization: Replace usage of strpos() with str_starts_with(). 2023-05-02 15:45:22 +00:00
options-privacy.php Coding Standards: Use __DIR__ magic constant in wp-admin/options-privacy.php. 2023-04-27 13:14:23 +00:00
options-reading.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
options-writing.php Administration: Hide password in options/writing. 2023-06-22 00:32:21 +00:00
options.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
plugin-editor.php Code Modernization: Use str_ends_with() in a few more places. 2023-06-24 09:52:19 +00:00
plugin-install.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
plugins.php Help/About: Avoid extra redirections on HelpHub Links. 2023-02-23 11:06:19 +00:00
post-new.php
post.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
press-this.php
privacy-policy-guide.php Coding Standards: Replace include_once with require_once for required files. 2023-04-09 11:57:22 +00:00
privacy.php Help/About: Updates to About page. 2023-07-24 23:39:22 +00:00
profile.php
revision.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
setup-config.php Upgrade/Install: Show/hide toggle on password fields. 2023-06-23 23:09:29 +00:00
site-editor.php Editor: Fix conditionals in Template Editing Mode. 2023-07-25 14:33:23 +00:00
site-health-info.php Site Health: Internationalizes count in the info section headings. 2021-11-01 22:36:59 +00:00
site-health.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 14:08:18 +00:00
term.php General: Replace all esc_url_raw() calls in core with sanitize_url(). 2022-06-01 18:14:10 +00:00
theme-editor.php Code Modernization: Use str_ends_with() in a few more places. 2023-06-24 09:52:19 +00:00
theme-install.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
themes.php General: add block theme previews. 2023-06-27 09:36:21 +00:00
tools.php Help/About: Use the new /documentation/ URLs for HelpHub links in WordPress Admin. 2023-02-23 10:38:21 +00:00
update-core.php Help/About: Fix typo in [56171]: support forum "topic", not "ticket". 2023-07-14 22:11:22 +00:00
update.php Coding Standards: Replace include_once with require_once for required files. 2023-04-09 11:57:22 +00:00
upgrade-functions.php
upgrade.php Help/About: Use the new /documentation/ URLs for links about WordPress version. 2023-04-04 22:38:22 +00:00
upload.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
user-edit.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:56:23 +00:00
user-new.php Upgrade/Install: Show/hide toggle on password fields. 2023-06-23 23:09:29 +00:00
users.php Coding Standards: Use strict comparison in wp-admin/users.php. 2023-06-04 02:35:19 +00:00
widgets-form-blocks.php Editor: Update preload paths for post, site and widgets editors 2022-04-07 13:40:04 +00:00
widgets-form.php Code Modernization: Replace usage of substr() with str_starts_with() and str_ends_with(). 2023-06-22 14:57:24 +00:00
widgets.php Administration: Replace contracted verb forms for better consistency. 2022-03-22 19:59:04 +00:00