WordPress.org

Make WordPress Core

Changeset 45730


Ignore:
Timestamp:
08/03/2019 08:20:42 PM (4 months ago)
Author:
jorbin
Message:

PHP 7.4 compatibility fix / accessing arrays/string using curly brace syntax

PHP used to allow both square brackets and curly braces to be used interchangeably for accessing array elements and string offsets. The curly bracket syntax is only allowed in a limited set of cases and can be confusing for people not used to it.
PHP 7.4 will deprecate the curly brace syntax for accessing array elements and string offsets and it is expected that support will be completely removed in PHP 8.0.
Ref: https://wiki.php.net/rfc/deprecate_curly_braces_array_access

See #47751.
Props jrf.

Location:
trunk/src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/class-ftp.php

    r45424 r45730  
    186186            if ($lcount<8) return '';
    187187            $b = array();
    188             $b['isdir'] = $lucifer[0]{0} === "d";
    189             $b['islink'] = $lucifer[0]{0} === "l";
     188            $b['isdir'] = $lucifer[0][0] === "d";
     189            $b['islink'] = $lucifer[0][0] === "l";
    190190            if ( $b['isdir'] )
    191191                $b['type'] = 'd';
  • trunk/src/wp-admin/includes/class-wp-filesystem-ftpext.php

    r45611 r45730  
    600600                }
    601601                $b           = array();
    602                 $b['isdir']  = $lucifer[0]{0} === 'd';
    603                 $b['islink'] = $lucifer[0]{0} === 'l';
     602                $b['isdir']  = $lucifer[0][0] === 'd';
     603                $b['islink'] = $lucifer[0][0] === 'l';
    604604                if ( $b['isdir'] ) {
    605605                    $b['type'] = 'd';
  • trunk/src/wp-admin/includes/class-wp-importer.php

    r45603 r45730  
    308308        } elseif ( (bool) preg_match( '/^-([a-zA-Z0-9]+)/', $args[ $i ], $match ) ) {
    309309            for ( $j = 0, $jl = strlen( $match[1] ); $j < $jl; $j++ ) {
    310                 $key         = $match[1]{$j};
     310                $key         = $match[1][ $j ];
    311311                $out[ $key ] = true;
    312312            }
  • trunk/src/wp-includes/class-json.php

    r45535 r45730  
    178178        }
    179179
    180         $bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
     180        $bytes = (ord($utf16[0]) << 8) | ord($utf16[1]);
    181181
    182182        switch(true) {
     
    231231                // return a UTF-16 character from a 2-byte UTF-8 char
    232232                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
    233                 return chr(0x07 & (ord($utf8{0}) >> 2))
    234                      . chr((0xC0 & (ord($utf8{0}) << 6))
    235                          | (0x3F & ord($utf8{1})));
     233                return chr(0x07 & (ord($utf8[0]) >> 2))
     234                     . chr((0xC0 & (ord($utf8[0]) << 6))
     235                         | (0x3F & ord($utf8[1])));
    236236
    237237            case 3:
    238238                // return a UTF-16 character from a 3-byte UTF-8 char
    239239                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
    240                 return chr((0xF0 & (ord($utf8{0}) << 4))
    241                          | (0x0F & (ord($utf8{1}) >> 2)))
    242                      . chr((0xC0 & (ord($utf8{1}) << 6))
    243                          | (0x7F & ord($utf8{2})));
     240                return chr((0xF0 & (ord($utf8[0]) << 4))
     241                         | (0x0F & (ord($utf8[1]) >> 2)))
     242                     . chr((0xC0 & (ord($utf8[1]) << 6))
     243                         | (0x7F & ord($utf8[2])));
    244244        }
    245245
     
    324324                for ($c = 0; $c < $strlen_var; ++$c) {
    325325
    326                     $ord_var_c = ord($var{$c});
     326                    $ord_var_c = ord($var[$c]);
    327327
    328328                    switch (true) {
     
    347347                        case $ord_var_c == 0x5C:
    348348                            // double quote, slash, slosh
    349                             $ascii .= '\\'.$var{$c};
     349                            $ascii .= '\\'.$var[$c];
    350350                            break;
    351351
    352352                        case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
    353353                            // characters U-00000000 - U-0000007F (same as ASCII)
    354                             $ascii .= $var{$c};
     354                            $ascii .= $var[$c];
    355355                            break;
    356356
     
    364364                            }
    365365                           
    366                             $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
     366                            $char = pack('C*', $ord_var_c, ord($var[$c + 1]));
    367367                            $c += 1;
    368368                            $utf16 = $this->utf82utf16($char);
     
    379379                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
    380380                            $char = pack('C*', $ord_var_c,
    381                                          @ord($var{$c + 1}),
    382                                          @ord($var{$c + 2}));
     381                                         @ord($var[$c + 1]),
     382                                         @ord($var[$c + 2]));
    383383                            $c += 2;
    384384                            $utf16 = $this->utf82utf16($char);
     
    395395                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
    396396                            $char = pack('C*', $ord_var_c,
    397                                          ord($var{$c + 1}),
    398                                          ord($var{$c + 2}),
    399                                          ord($var{$c + 3}));
     397                                         ord($var[$c + 1]),
     398                                         ord($var[$c + 2]),
     399                                         ord($var[$c + 3]));
    400400                            $c += 3;
    401401                            $utf16 = $this->utf82utf16($char);
     
    412412                            }
    413413                            $char = pack('C*', $ord_var_c,
    414                                          ord($var{$c + 1}),
    415                                          ord($var{$c + 2}),
    416                                          ord($var{$c + 3}),
    417                                          ord($var{$c + 4}));
     414                                         ord($var[$c + 1]),
     415                                         ord($var[$c + 2]),
     416                                         ord($var[$c + 3]),
     417                                         ord($var[$c + 4]));
    418418                            $c += 4;
    419419                            $utf16 = $this->utf82utf16($char);
     
    430430                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
    431431                            $char = pack('C*', $ord_var_c,
    432                                          ord($var{$c + 1}),
    433                                          ord($var{$c + 2}),
    434                                          ord($var{$c + 3}),
    435                                          ord($var{$c + 4}),
    436                                          ord($var{$c + 5}));
     432                                         ord($var[$c + 1]),
     433                                         ord($var[$c + 2]),
     434                                         ord($var[$c + 3]),
     435                                         ord($var[$c + 4]),
     436                                         ord($var[$c + 5]));
    437437                            $c += 5;
    438438                            $utf16 = $this->utf82utf16($char);
     
    627627
    628628                        $substr_chrs_c_2 = $this->substr8($chrs, $c, 2);
    629                         $ord_chrs_c = ord($chrs{$c});
     629                        $ord_chrs_c = ord($chrs[$c]);
    630630
    631631                        switch (true) {
     
    657657                                if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
    658658                                   ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
    659                                     $utf8 .= $chrs{++$c};
     659                                    $utf8 .= $chrs[++$c];
    660660                                }
    661661                                break;
     
    670670
    671671                            case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
    672                                 $utf8 .= $chrs{$c};
     672                                $utf8 .= $chrs[$c];
    673673                                break;
    674674
     
    717717                    // array, or object notation
    718718
    719                     if ($str{0} == '[') {
     719                    if ($str[0] == '[') {
    720720                        $stk = array(SERVICES_JSON_IN_ARR);
    721721                        $arr = array();
     
    756756                        $substr_chrs_c_2 = $this->substr8($chrs, $c, 2);
    757757
    758                         if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
     758                        if (($c == $strlen_chrs) || (($chrs[$c] == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
    759759                            // found a comma that is not inside a string, array, etc.,
    760760                            // OR we've reached the end of the character list
     
    797797                            }
    798798
    799                         } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
     799                        } elseif ((($chrs[$c] == '"') || ($chrs[$c] == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
    800800                            // found a quote, and we are not inside a string
    801                             array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
     801                            array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs[$c]));
    802802                            //print("Found start of string at {$c}\n");
    803803
    804                         } elseif (($chrs{$c} == $top['delim']) &&
     804                        } elseif (($chrs[$c] == $top['delim']) &&
    805805                                 ($top['what'] == SERVICES_JSON_IN_STR) &&
    806806                                 (($this->strlen8($this->substr8($chrs, 0, $c)) - $this->strlen8(rtrim($this->substr8($chrs, 0, $c), '\\'))) % 2 != 1)) {
     
    811811                            //print("Found end of string at {$c}: ".$this->substr8($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
    812812
    813                         } elseif (($chrs{$c} == '[') &&
     813                        } elseif (($chrs[$c] == '[') &&
    814814                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
    815815                            // found a left-bracket, and we are in an array, object, or slice
     
    817817                            //print("Found start of array at {$c}\n");
    818818
    819                         } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
     819                        } elseif (($chrs[$c] == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
    820820                            // found a right-bracket, and we're in an array
    821821                            array_pop($stk);
    822822                            //print("Found end of array at {$c}: ".$this->substr8($chrs, $top['where'], (1 + $c - $top['where']))."\n");
    823823
    824                         } elseif (($chrs{$c} == '{') &&
     824                        } elseif (($chrs[$c] == '{') &&
    825825                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
    826826                            // found a left-brace, and we are in an array, object, or slice
     
    828828                            //print("Found start of object at {$c}\n");
    829829
    830                         } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
     830                        } elseif (($chrs[$c] == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
    831831                            // found a right-brace, and we're in an object
    832832                            array_pop($stk);
  • trunk/src/wp-includes/class-pop3.php

    r42201 r45730  
    377377        while ( !preg_match('/^\.\r\n/',$line))
    378378        {
    379             if ( $line{0} == '.' ) { $line = substr($line,1); }
     379            if ( $line[0] == '.' ) { $line = substr($line,1); }
    380380            $MsgArray[$count] = $line;
    381381            $count++;
  • trunk/src/wp-includes/class-wp-editor.php

    r45621 r45730  
    758758                continue;
    759759            } elseif ( ! empty( $value ) && is_string( $value ) && (
    760                 ( '{' == $value{0} && '}' == $value{strlen( $value ) - 1} ) ||
    761                 ( '[' == $value{0} && ']' == $value{strlen( $value ) - 1} ) ||
     760                ( '{' == $value[0] && '}' == $value[ strlen( $value ) - 1 ] ) ||
     761                ( '[' == $value[0] && ']' == $value[ strlen( $value ) - 1 ] ) ||
    762762                preg_match( '/^\(?function ?\(/', $value ) ) ) {
    763763
  • trunk/src/wp-includes/script-loader.php

    r45673 r45730  
    755755            continue;
    756756        } elseif ( ! empty( $value ) && is_string( $value ) && (
    757             ( '{' === $value{0} && '}' === $value{strlen( $value ) - 1} ) ||
    758             ( '[' === $value{0} && ']' === $value{strlen( $value ) - 1} ) ||
     757            ( '{' === $value[0] && '}' === $value[ strlen( $value ) - 1 ] ) ||
     758            ( '[' === $value[0] && ']' === $value[ strlen( $value ) - 1 ] ) ||
    759759            preg_match( '/^\(?function ?\(/', $value ) ) ) {
    760760            $init_obj .= $key . ':' . $value . ',';
Note: See TracChangeset for help on using the changeset viewer.