Make WordPress Core

Changeset 36101


Ignore:
Timestamp:
12/26/2015 05:23:43 AM (8 years ago)
Author:
dd32
Message:

Allow map_deep() to work with object properties containing a reference. Restores the previous behaviour of stripslashes_deep().

Merges [36100] to the 4.4 branch.
Props jeff@…, swissspidy.
See #22300, [35252].
Fixes #35058.

Location:
branches/4.4
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/4.4

  • branches/4.4/src/wp-includes/formatting.php

    r36098 r36101  
    38973897 */
    38983898function map_deep( $value, $callback ) {
    3899     if ( is_array( $value ) || is_object( $value ) ) {
    3900         foreach ( $value as &$item ) {
    3901             $item = map_deep( $item, $callback );
    3902         }
    3903         return $value;
     3899    if ( is_array( $value ) ) {
     3900        foreach ( $value as $index => $item ) {
     3901            $value[ $index ] = map_deep( $item, $callback );
     3902        }
     3903    } elseif ( is_object( $value ) ) {
     3904        $object_vars = get_object_vars( $value );
     3905        foreach ( $object_vars as $property_name => $property_value ) {
     3906            $value->$property_name = map_deep( $property_value, $callback );
     3907        }
    39043908    } else {
    3905         return call_user_func( $callback, $value );
    3906     }
     3909        $value = call_user_func( $callback, $value );
     3910    }
     3911
     3912    return $value;
    39073913}
    39083914
  • branches/4.4/tests/phpunit/tests/formatting/MapDeep.php

    r35252 r36101  
    9595    }
    9696
     97    /**
     98     * @ticket 35058
     99     */
     100    public function test_map_deep_should_map_object_properties_passed_by_reference() {
     101        $object_a = (object) array( 'var0' => 'a' );
     102        $object_b = (object) array( 'var0' => &$object_a->var0, 'var1' => 'x' );
     103        $this->assertEquals( (object) array(
     104            'var0' => 'ababa',
     105            'var1' => 'xbaba',
     106        ), map_deep( $object_b, array( $this, 'append_baba' ) ) );
     107    }
     108
     109    /**
     110     * @ticket 35058
     111     */
     112    public function test_map_deep_should_map_array_elements_passed_by_reference() {
     113        $array_a = array( 'var0' => 'a' );
     114        $array_b = array( 'var0' => &$array_a['var0'], 'var1' => 'x' );
     115        $this->assertEquals( array(
     116            'var0' => 'ababa',
     117            'var1' => 'xbaba',
     118        ), map_deep( $array_b, array( $this, 'append_baba' ) ) );
     119    }
     120
    97121    public function append_baba( $value ) {
    98122        return $value . 'baba';
Note: See TracChangeset for help on using the changeset viewer.