Code Modernization: Rename the `readonly()` function to `wp_readonly()`.

Since PHP 8.1, `readonly` is a reserved keyword and cannot be used as a function name.

In order to avoid PHP parser errors, the `readonly()` function was extracted to a separate file and is now only included conditionally on PHP < 8.1.

This commit also:
* Moves the tests for the `__checked_selected_helper()` function and all the related functions to their own file.
* Switches to named data providers. This makes the output when using the `--testdox` option more descriptive and is helpful when trying to debug which data set from a data provider failed the test.
* Improves the tests in question to make them feature-complete and expand test coverage.

Props jrf, ayeshrajans, haosun, knutsp, swissspidy, SergeyBiryukov.
Fixes #53858.
Built from https://develop.svn.wordpress.org/trunk@51586


git-svn-id: http://core.svn.wordpress.org/trunk@51197 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Sergey Biryukov 2021-08-09 17:21:00 +00:00
parent 68f7026cde
commit 52da9fb6af
3 changed files with 48 additions and 3 deletions

View File

@ -4813,17 +4813,27 @@ function disabled( $disabled, $current = true, $echo = true ) {
*
* Compares the first two arguments and if identical marks as readonly
*
* @since 4.9.0
* @since 5.9.0
*
* @param mixed $readonly One of the values to compare
* @param mixed $current (true) The other value to compare if not just true
* @param bool $echo Whether to echo or just return the string
* @return string HTML attribute or empty string
*/
function readonly( $readonly, $current = true, $echo = true ) {
function wp_readonly( $readonly, $current = true, $echo = true ) {
return __checked_selected_helper( $readonly, $current, $echo, 'readonly' );
}
/*
* Include a compat `readonly()` function on PHP < 8.1. Since PHP 8.1,
* `readonly` is a reserved keyword and cannot be used as a function name.
* In order to avoid PHP parser errors, this function was extracted
* to a separate file and is only included conditionally on PHP < 8.1.
*/
if ( PHP_VERSION_ID < 80100 ) {
require_once __DIR__ . '/php-compat/readonly.php';
}
/**
* Private helper function for checked, selected, disabled and readonly.
*

View File

@ -0,0 +1,35 @@
<?php
/**
* Conditionally declares a `readonly()` function, which was renamed
* to `wp_readonly()` in WordPress 5.9.0.
*
* In order to avoid PHP parser errors, this function was extracted
* to this separate file and is only included conditionally on PHP 8.1.
*
* Including this file on PHP >= 8.1 results in a fatal error.
*
* @package WordPress
* @since 5.9.0
*/
/**
* Outputs the HTML readonly attribute.
*
* Compares the first two arguments and if identical marks as readonly
*
* This function is deprecated, and cannot be used on PHP >= 8.1.
*
* @since 4.9.0
* @deprecated 5.9.0 Use `wp_readonly` introduced in 5.9.0.
*
* @see wp_readonly()
*
* @param mixed $readonly One of the values to compare
* @param mixed $current (true) The other value to compare if not just true
* @param bool $echo Whether to echo or just return the string
* @return string HTML attribute or empty string
*/
function readonly( $readonly, $current = true, $echo = true ) {
_deprecated_function( __FUNCTION__, '5.9.0', 'wp_readonly()' );
return wp_readonly( $readonly, $current, $echo );
}

View File

@ -13,7 +13,7 @@
*
* @global string $wp_version
*/
$wp_version = '5.9-alpha-51585';
$wp_version = '5.9-alpha-51586';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.