[wp-trac] [WordPress Trac] #55656: PHP 8.x: various compatibility fixes for WordPress 6.1
WordPress Trac
noreply at wordpress.org
Tue Sep 13 15:56:42 UTC 2022
#55656: PHP 8.x: various compatibility fixes for WordPress 6.1
-------------------------------------------------+-------------------------
Reporter: hellofromTonya | Owner: (none)
Type: task (blessed) | Status: new
Priority: normal | Milestone: 6.1
Component: General | Version:
Severity: normal | Resolution:
Keywords: php8 php81 has-patch has-unit-tests | Focuses: coding-
| standards
-------------------------------------------------+-------------------------
Comment (by SergeyBiryukov):
In [changeset:"54142" 54142]:
{{{
#!CommitTicketReference repository="" revision="54142"
Code Modernization: Fix autovivification from `false` to `array` in
`WP_Scripts::localize()`.
This function was previously already problematic as it does not do proper
input validation, and it has already received tweaks related to PHP 8.0 in
[50408] / #52534, which also introduced a `_doing_it_wrong()` notice and
added tests.
The short of it is:
* The function expects to receive an `array` for the `$l10n` parameter;
* ...but silently supported the parameter being passed as a `string`;
* ...and would expect PHP to gracefully handle everything else or throw
appropriate warnings/errors.
In the previous fix, a `_doing_it_wrong()` notice was added for any non-
array inputs. The function would also cause a PHP native "Cannot use a
scalar value as an array" warning (PHP < 8.0) or error (PHP 8.0+) for all
scalar values, except `false`.
PHP 8.1 deprecated autovivification from `false` to `array`, so now
`false` starts throwing an "Automatic conversion of false to array is
deprecated" notice.
By rights, the function should just throw an exception when a non-
array/string input is received, but that would be a backward compatibility
break.
So the current change will maintain the previous behavior, but will
prevent both the "Cannot use a scalar value as an array" warning/error as
well as the "Automatic conversion of false to array" deprecation notice
for invalid inputs.
Invalid inputs ''will'' still receive a `_doing_it_wrong()` notice, which
is the reason this fix is considered acceptable.
Includes:
* Adding a test passing an empty array.
* Adding a test to the data provider for a `null` input to make sure that
the function will not throw a PHP 8.1 "passing null to non-nullable"
notice.
This solves the following PHP 8.1 test error:
{{{
Tests_Dependencies_Scripts::test_wp_localize_script_data_formats with data
set #8 (false, '[""]')
Automatic conversion of false to array is deprecated
/var/www/src/wp-includes/class.wp-scripts.php:514
/var/www/src/wp-includes/functions.wp-scripts.php:221
/var/www/tests/phpunit/tests/dependencies/scripts.php:1447
/var/www/vendor/bin/phpunit:123
}}}
Reference:
[https://www.php.net/manual/en/migration81.deprecated.php#migration81.deprecated.core
.autovivification-false PHP Manual: PHP 8.1 Deprecations: Autovivification
from false].
Follow-up to [7970], [18464], [18490], [19217], [50408].
Props jrf, costdev.
See #55656.
}}}
--
Ticket URL: <https://core.trac.wordpress.org/ticket/55656#comment:32>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list