WordPress.org

Make WordPress Core


Ignore:
Timestamp:
07/06/2016 05:50:44 PM (4 years ago)
Author:
rmccue
Message:

HTTP API: Switch back to returning an array.

The array-compatibility object we started returning in r37428 unfortunately isn't enough like an array. In particular, is_array() checks fail, despite the object implementing ArrayAccess. Mea culpa.

This moves the WP_HTTP_Response object to a new http_response key in the array, and changes the value back to an actual array.

Fixes #37097.
See #33055.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-http-requests-response.php

    r37431 r37989  
    22
    33/**
    4  * Wrapper object for a Requests_Response for compatibility.
     4 * Wrapper object for a Requests_Response for standardisation.
    55 *
    66 * @package WordPress
     
    88 * @since 4.6.0
    99 */
    10 class WP_HTTP_Requests_Response extends WP_HTTP_Response implements ArrayAccess {
     10class WP_HTTP_Requests_Response extends WP_HTTP_Response {
    1111    /**
    1212     * Requests Response object.
     
    143143
    144144    /**
    145      * Check if an ArrayAccess offset exists.
     145     * Convert the object to a WP_Http response array.
    146146     *
    147      * This is for array access back-compat.
    148      *
    149      * @param string|int $key Array offset.
    150      * @return bool True if the offset exists, false otherwise.
     147     * @return array WP_Http response array, per WP_Http::request().
    151148     */
    152     public function offsetExists( $key ) {
    153         $allowed = array( 'headers', 'body', 'response', 'cookies', 'filename' );
    154         return in_array( $key, $allowed );
    155     }
    156 
    157     /**
    158      * Get an ArrayAccess value.
    159      *
    160      * This is for array access back-compat.
    161      *
    162      * @param string|int $key Array offset to get.
    163      * @return mixed Value if the key is a valid offset, null if invalid.
    164      */
    165     public function offsetGet( $key ) {
    166         switch ( $key ) {
    167             case 'headers':
    168                 return $this->get_headers();
    169 
    170             case 'body':
    171                 return $this->get_data();
    172 
    173             case 'response':
    174                 return array(
    175                     'code'    => $this->get_status(),
    176                     'message' => get_status_header_desc( $this->get_status() ),
    177                 );
    178 
    179             case 'cookies':
    180                 return $this->get_cookies();
    181 
    182             case 'filename':
    183                 return $this->filename;
    184         }
    185 
    186         return null;
    187     }
    188 
    189     /**
    190      * Set an ArrayAccess value.
    191      *
    192      * This is for array access back-compat.
    193      *
    194      * @param string|int $key Array offset to set.
    195      * @param mixed $value Value to set.
    196      */
    197     public function offsetSet( $key, $value ) {
    198         switch ( $key ) {
    199             case 'headers':
    200                 $this->set_headers( $value );
    201                 break;
    202 
    203             case 'body':
    204                 $this->set_data( $value );
    205                 break;
    206 
    207             case 'response':
    208                 if ( isset( $value['code'] ) ) {
    209                     $this->set_status( $value['code'] );
    210                 }
    211                 break;
    212 
    213             case 'filename':
    214                 $this->filename = $value;
    215                 break;
    216         }
    217     }
    218 
    219     /**
    220      * Unset an ArrayAccess value.
    221      *
    222      * This is for array access back-compat.
    223      *
    224      * @param string|int $key Array offset to remove.
    225      */
    226     public function offsetUnset( $key ) {
    227         $this->offsetSet( $key, null );
     149    public function to_array() {
     150        return array(
     151            'headers' => $this->get_headers(),
     152            'body' => $this->get_data(),
     153            'response' => array(
     154                'code'    => $this->get_status(),
     155                'message' => get_status_header_desc( $this->get_status() ),
     156            ),
     157            'cookies' => $this->get_cookies(),
     158            'filename' => $this->filename,
     159        );
    228160    }
    229161}
Note: See TracChangeset for help on using the changeset viewer.