Make WordPress Core


Ignore:
Timestamp:
01/10/2023 01:59:00 PM (18 months ago)
Author:
hellofromTonya
Message:

I18N: Initialize WP_Locale array properties.

Initializing the WP_Locale array properties to an empty array at the class definition point. Why?

  • Ensure the properties initialize to an array data type at instantiation (rather than null).

This initialization is needed to ensure the properties are not null if another class inherits from WP_Locale but does not run WP_Locale::init() from the constructor. In this case, the initialization prevents

Warning: array_values() expects parameter 1 to be array, null given

when Core uses any of the properties.

  • Good design practice.

The code and documentation are clearly expecting these properties to be an array data type. Setting each to a default array() state further helps to clearly communicate the code design.

Follow-up to [37889], [36292], [31078], [3676], [6589].

Props tyxla, SergeyBiryukov, azaozz, hellofromTonya, mukesh27.
See #57427.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/locale.php

    r53866 r55047  
    1414        parent::set_up();
    1515        $this->locale = new WP_Locale();
     16    }
     17
     18    /**
     19     * @ticket 57427
     20     *
     21     * @dataProvider data_property_initializes_to_array
     22     *
     23     * @param string $name Property name to test.
     24     */
     25    public function test_property_initializes_to_array( $name ) {
     26        $this->assertIsArray( $this->locale->$name, "WP_Locale::{$name} property should be an array" );
     27
     28        // Test a custom implementation when `init()` is not invoked in the constructor.
     29        $wp_locale = new Custom_WP_Locale();
     30        $this->assertIsArray( $wp_locale->$name, "Custom_WP_Locale::{$name} property should be an array" );
     31    }
     32
     33    /**
     34     * Data provider.
     35     *
     36     * @return array
     37     */
     38    public function data_property_initializes_to_array() {
     39        return array(
     40            'weekday'         => array( 'weekday' ),
     41            'weekday_initial' => array( 'weekday_initial' ),
     42            'weekday_abbrev'  => array( 'weekday_abbrev' ),
     43            'month'           => array( 'month' ),
     44            'month_genitive'  => array( 'month_genitive' ),
     45            'month_abbrev'    => array( 'month_abbrev' ),
     46            'meridiem'        => array( 'meridiem' ),
     47            'number_format'   => array( 'number_format' ),
     48        );
    1649    }
    1750
     
    142175    }
    143176}
     177
     178class Custom_WP_Locale extends WP_Locale {
     179    public function __construct() {
     180        // Do not initialize to test property initialization.
     181        // $this->init();
     182        $this->register_globals();
     183    }
     184}
Note: See TracChangeset for help on using the changeset viewer.