WordPress/wp-admin/includes
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
..
admin-filters.php General: add nonce for block theme preview activation. 2023-07-11 05:03:23 +00:00
admin.php General: add nonce for block theme preview activation. 2023-07-11 05:03:23 +00:00
ajax-actions.php Code Modernization: Use str_contains() in a few more places. 2023-07-17 13:18:27 +00:00
bookmark.php Docs: Various improvements in Bookmark Administration API function descriptions, as per docblocks standards. 2023-05-03 10:03:21 +00:00
class-automatic-upgrader-skin.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
class-bulk-plugin-upgrader-skin.php Code Modernization: Explicitly declare all properties in WP_Ajax_Upgrader_Skin. 2022-08-29 12:46:10 +00:00
class-bulk-theme-upgrader-skin.php Code Modernization: Explicitly declare all properties in WP_Ajax_Upgrader_Skin. 2022-08-29 12:46:10 +00:00
class-bulk-upgrader-skin.php Upgrade/Install: Update 'show details' button change. 2023-06-25 22:57:26 +00:00
class-core-upgrader.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:52:24 +00:00
class-custom-background.php I18N: Provide gettext context to disambiguate various translation strings. 2023-06-05 21:05:22 +00:00
class-custom-image-header.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
class-file-upload-upgrader.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 06:34:27 +00:00
class-ftp-pure.php Docs: Update URLs in some @link tags and switch them to HTTPS. 2019-11-01 14:57:02 +00:00
class-ftp-sockets.php Administration: Replace contracted verb forms for better consistency. 2022-03-22 16:25:03 +00:00
class-ftp.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
class-language-pack-upgrader-skin.php Code Modernization: Fix parameter name mismatches for parent/child classes in WP_Upgrader_Skin::error(). 2021-09-09 13:59:56 +00:00
class-language-pack-upgrader.php Code Modernization: Replace usage of substr() with str_starts_with() and str_ends_with(). 2023-06-22 14:57:24 +00:00
class-pclzip.php Docs: Fix a few more typos in DocBlocks and inline comments. 2023-05-19 13:27:20 +00:00
class-plugin-installer-skin.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 06:34:27 +00:00
class-plugin-upgrader-skin.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 06:34:27 +00:00
class-plugin-upgrader.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:52:24 +00:00
class-theme-installer-skin.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 06:34:27 +00:00
class-theme-upgrader-skin.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 06:34:27 +00:00
class-theme-upgrader.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:52:24 +00:00
class-walker-category-checklist.php Code Modernization: Fix reserved keyword and parameter name mismatches for parent/child classes in Walker::end_el(). 2021-09-09 13:03:55 +00:00
class-walker-nav-menu-checklist.php Code Modernization: Fix last parameter name mismatches for parent/child classes in Walker::start_el(). 2021-09-09 12:39:59 +00:00
class-walker-nav-menu-edit.php I18N: Mark screen reader strings as such with translator comments. 2023-02-07 17:10:21 +00:00
class-wp-ajax-upgrader-skin.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
class-wp-application-passwords-list-table.php Docs: A host of corrections and improvements to inline documentation. 2023-05-08 22:37:24 +00:00
class-wp-automatic-updater.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:52:24 +00:00
class-wp-comments-list-table.php Administration: Backwards compatibility for new sortable keys. 2023-06-23 17:49:28 +00:00
class-wp-community-events.php Administration: Guard against false transient key in get_cached_events(). 2022-09-27 18:57:13 +00:00
class-wp-debug-data.php Site Health: Use PHP_SAPI constant instead of the php_sapi_name() function. 2023-08-02 10:59:25 +00:00
class-wp-filesystem-base.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:52:24 +00:00
class-wp-filesystem-direct.php Filesystem API: Correct and improve the return type documentation for the dirlist() method in WP_Filesystem_Base and its extending classes. 2023-05-03 21:30:19 +00:00
class-wp-filesystem-ftpext.php Filesystem API: Correct and improve the return type documentation for the dirlist() method in WP_Filesystem_Base and its extending classes. 2023-05-03 21:30:19 +00:00
class-wp-filesystem-ftpsockets.php Filesystem API: Correct and improve the return type documentation for the dirlist() method in WP_Filesystem_Base and its extending classes. 2023-05-03 21:30:19 +00:00
class-wp-filesystem-ssh2.php Filesystem API: Define password as null if not set when using SSH2 with public/private keys. 2023-06-29 17:05:30 +00:00
class-wp-importer.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 12:57:20 +00:00
class-wp-internal-pointers.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 12:57:20 +00:00
class-wp-links-list-table.php Administration: Set accessible state for list table headers. 2023-06-21 21:47:23 +00:00
class-wp-list-table-compat.php Docs: Add missing descriptions for _WP_List_Table_Compat methods. 2020-11-14 16:54:08 +00:00
class-wp-list-table.php Code Modernization: Deprecate dynamic properties in WP_List_Table magic methods. 2023-08-02 18:37:21 +00:00
class-wp-media-list-table.php Media: Only show “Copy” and “Download” actions when an attachment URL is available. 2023-06-27 16:29:28 +00:00
class-wp-ms-sites-list-table.php Coding Standards: Correct equals sign alignment in various files. 2023-07-20 00:06:21 +00:00
class-wp-ms-themes-list-table.php Administration: Set accessible state for list table headers. 2023-06-21 21:47:23 +00:00
class-wp-ms-users-list-table.php Administration: Set accessible state for list table headers. 2023-06-21 21:47:23 +00:00
class-wp-plugin-install-list-table.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:52:24 +00:00
class-wp-plugins-list-table.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:52:24 +00:00
class-wp-post-comments-list-table.php Administration: Remove private delegation from list tables. 2022-10-04 03:47:15 +00:00
class-wp-posts-list-table.php Coding Standards: Correct equals sign alignment in various files. 2023-07-20 00:06:21 +00:00
class-wp-privacy-data-export-requests-list-table.php Privacy: Fix "Retry" action after a personal data export failure. 2022-03-10 19:22:01 +00:00
class-wp-privacy-data-removal-requests-list-table.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 06:34:27 +00:00
class-wp-privacy-policy-content.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:52:24 +00:00
class-wp-privacy-requests-table.php Administration: Make checkbox column clickable. 2023-06-21 01:54:19 +00:00
class-wp-screen.php Code Modernization: Replace usage of substr() with str_starts_with() and str_ends_with(). 2023-06-22 14:57:24 +00:00
class-wp-site-health-auto-updates.php Code Modernization: Replace usage of substr() with str_starts_with() and str_ends_with(). 2023-06-22 14:57:24 +00:00
class-wp-site-health.php Upgrade/Install: Pass stored credentials to WP_Filesystem() where appropriate. 2023-08-01 16:07:25 +00:00
class-wp-site-icon.php Coding Standards: Use strict comparison in wp-admin/includes/class-wp-site-icon.php. 2023-04-23 04:02:18 +00:00
class-wp-terms-list-table.php Administration: Set accessible state for list table headers. 2023-06-21 21:47:23 +00:00
class-wp-theme-install-list-table.php Docs: Use third-person singular verbs in various function descriptions, as per docblocks standards. 2023-06-14 06:34:27 +00:00
class-wp-themes-list-table.php Docs: A host of corrections and improvements to inline documentation. 2023-05-08 22:37:24 +00:00
class-wp-upgrader-skin.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
class-wp-upgrader-skins.php Docs: Add missing @deprecated tags in the file docblock of some deprecated files. 2019-10-08 17:19:04 +00:00
class-wp-upgrader.php I18N: Add missing translator comment in WP_Upgrader::generic_strings(). 2023-07-21 13:33:27 +00:00
class-wp-users-list-table.php Users: Remove password reset links when the feature is not allowed for a specific user. 2023-07-06 12:47:23 +00:00
comment.php Docs: Use third-person singular verbs for function descriptions in wp-admin/includes/comment.php, as per docblocks standards. 2022-07-20 22:15:10 +00:00
continents-cities.php I18N: Update list of continents and cities for the timezone selection. 2022-09-19 23:24:11 +00:00
credits.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
dashboard.php Administration: Update dashboard welcome panel for 6.3. 2023-07-24 23:15:23 +00:00
deprecated.php Code Modernization: Replace usage of substr() with str_starts_with() and str_ends_with(). 2023-06-22 14:57:24 +00:00
edit-tag-messages.php Docs: Various inline documentation corrections and improvements. 2021-12-07 12:20:02 +00:00
export.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
file.php Filesystem API: Ensure wp_tempnam() does not produce file names longer than 255 characters as this is the limit on most filesystems. 2023-07-10 20:33:23 +00:00
image-edit.php Media: Fix height max value in image scaling. 2023-07-21 14:33:22 +00:00
image.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:52:24 +00:00
import.php Docs: Various docblock improvements in Importer Administration API, as per docs standards. 2022-07-29 09:22:10 +00:00
list-table.php Administration: Remove private delegation from list tables. 2022-10-04 03:47:15 +00:00
media.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:52:24 +00:00
menu.php Coding Standards: Use strict comparison in wp-admin/includes/menu.php. 2023-05-31 14:53:26 +00:00
meta-boxes.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 19:52:24 +00:00
misc.php Docs: Document the return value of wp_check_php_version() using hash notation. 2023-07-06 00:16:23 +00:00
ms-admin-filters.php Networks and Sites: Officially remove global terms. 2022-09-20 02:51:09 +00:00
ms-deprecated.php Networks and Sites: Officially remove global terms. 2022-09-20 02:51:09 +00:00
ms.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 20:07:22 +00:00
nav-menu.php Menus: Fix critical errors when the page_on_front and/or page_for_posts options contain references to non-existing posts. 2023-07-14 21:47:22 +00:00
network.php Code Modernization: Replace usage of strpos() with str_starts_with(). 2023-05-02 15:45:22 +00:00
noop.php Coding Standards: Fix brace indentation in wp-align/includes/noop.php. 2022-11-26 09:12:17 +00:00
options.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 20:07:22 +00:00
plugin-install.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 20:07:22 +00:00
plugin.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 20:07:22 +00:00
post.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 20:07:22 +00:00
privacy-tools.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
revision.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 20:07:22 +00:00
schema.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 20:07:22 +00:00
screen.php Coding Standards: Use strict comparison in wp-admin/includes/screen.php. 2021-05-09 20:27:02 +00:00
taxonomy.php Coding Standards: Use strict comparison in wp-admin/includes/taxonomy.php. 2023-03-10 07:04:20 +00:00
template.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 20:07:22 +00:00
theme-install.php I18N: Mark screen reader strings as such with translator comments. 2023-02-07 17:10:21 +00:00
theme.php Code Modernization: Use str_contains() in a few more places. 2023-07-17 13:18:27 +00:00
translation-install.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:51:14 +00:00
update-core.php Docs: Replace multiple single line comments with multi-line comments. 2023-07-09 20:07:22 +00:00
update.php Coding Standards: Use strict comparison in wp-admin/includes/update.php. 2023-06-01 15:14:27 +00:00
upgrade.php Docs: Add a missing word in maybe_create_table() description. 2023-07-19 11:33:26 +00:00
user.php Code Modernization: Replace usage of strpos() with str_contains(). 2023-06-22 14:36:26 +00:00
widgets.php Docs: Various corrections and improvements to inline docs and docblocks. 2023-05-12 21:35:21 +00:00