[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