Make WordPress Core

Ticket #47698: 47698-patch-2-remove-spl-autoload-polyfill.patch

File 47698-patch-2-remove-spl-autoload-polyfill.patch, 4.6 KB (added by jrf, 5 years ago)
  • src/wp-includes/compat.php

    From 23263f16be079731c03f5b04b24f0c65176e2736 Mon Sep 17 00:00:00 2001
    From: jrfnl <jrfnl@users.noreply.github.com>
    Date: Fri, 12 Jul 2019 06:15:17 +0200
    Subject: [PATCH] Remove SPL autoload polyfill functionality
    
    ---
     src/wp-includes/compat.php              |  10 ---
     src/wp-includes/spl-autoload-compat.php | 114 +++---------------------
     2 files changed, 14 insertions(+), 110 deletions(-)
     rewrite src/wp-includes/spl-autoload-compat.php (90%)
    
    diff --git a/src/wp-includes/compat.php b/src/wp-includes/compat.php
    index 1df248f890..f208887d5d 100644
    a b if ( ! function_exists( 'sodium_crypto_box' ) ) { 
    323323        require ABSPATH . WPINC . '/sodium_compat/autoload.php';
    324324}
    325325
    326 /**
    327  * Polyfill for the SPL autoloader. In PHP 5.2 (but not 5.3 and later), SPL can
    328  * be disabled, and PHP 7.2 raises notices if the compiler finds an __autoload()
    329  * function declaration. Function availability is checked here, and the
    330  * autoloader is included only if necessary.
    331  */
    332 if ( ! function_exists( 'spl_autoload_register' ) ) {
    333         require_once ABSPATH . WPINC . '/spl-autoload-compat.php';
    334 }
    335 
    336326if ( ! function_exists( 'is_countable' ) ) {
    337327        /**
    338328         * Polyfill for is_countable() function added in PHP 7.3.
  • src/wp-includes/spl-autoload-compat.php

    diff --git a/src/wp-includes/spl-autoload-compat.php b/src/wp-includes/spl-autoload-compat.php
    dissimilarity index 90%
    index 599b6046b3..982d9c2a83 100644
    a b  
    1 <?php
    2 /**
    3  * Polyfill for SPL autoload feature. This file is separate to prevent compiler notices
    4  * on the deprecated __autoload() function.
    5  *
    6  * See https://core.trac.wordpress.org/ticket/41134
    7  *
    8  * @package PHP
    9  * @access private
    10  */
    11 
    12 if ( ! function_exists( 'spl_autoload_register' ) ) {
    13         $_wp_spl_autoloaders = array();
    14 
    15         /**
    16          * Autoloader compatibility callback.
    17          *
    18          * @since 4.6.0
    19          *
    20          * @param string $classname Class to attempt autoloading.
    21          */
    22         function __autoload( $classname ) {
    23                 global $_wp_spl_autoloaders;
    24                 foreach ( $_wp_spl_autoloaders as $autoloader ) {
    25                         if ( ! is_callable( $autoloader ) ) {
    26                                 // Avoid the extra warning if the autoloader isn't callable.
    27                                 continue;
    28                         }
    29 
    30                         call_user_func( $autoloader, $classname );
    31 
    32                         // If it has been autoloaded, stop processing.
    33                         if ( class_exists( $classname, false ) ) {
    34                                 return;
    35                         }
    36                 }
    37         }
    38 
    39         /**
    40          * Registers a function to be autoloaded.
    41          *
    42          * @since 4.6.0
    43          *
    44          * @param callable $autoload_function The function to register.
    45          * @param bool     $throw             Optional. Whether the function should throw an exception
    46          *                                    if the function isn't callable. Default true.
    47          * @param bool     $prepend           Whether the function should be prepended to the stack.
    48          *                                    Default false.
    49          */
    50         function spl_autoload_register( $autoload_function, $throw = true, $prepend = false ) {
    51                 if ( $throw && ! is_callable( $autoload_function ) ) {
    52                         // String not translated to match PHP core.
    53                         throw new Exception( 'Function not callable' );
    54                 }
    55 
    56                 global $_wp_spl_autoloaders;
    57 
    58                 // Don't allow multiple registration.
    59                 if ( in_array( $autoload_function, $_wp_spl_autoloaders ) ) {
    60                         return;
    61                 }
    62 
    63                 if ( $prepend ) {
    64                         array_unshift( $_wp_spl_autoloaders, $autoload_function );
    65                 } else {
    66                         $_wp_spl_autoloaders[] = $autoload_function;
    67                 }
    68         }
    69 
    70         /**
    71          * Unregisters an autoloader function.
    72          *
    73          * @since 4.6.0
    74          *
    75          * @param callable $function The function to unregister.
    76          * @return bool True if the function was unregistered, false if it could not be.
    77          */
    78         function spl_autoload_unregister( $function ) {
    79                 global $_wp_spl_autoloaders;
    80                 foreach ( $_wp_spl_autoloaders as &$autoloader ) {
    81                         if ( $autoloader === $function ) {
    82                                 unset( $autoloader );
    83                                 return true;
    84                         }
    85                 }
    86 
    87                 return false;
    88         }
    89 
    90         /**
    91          * Retrieves the registered autoloader functions.
    92          *
    93          * @since 4.6.0
    94          *
    95          * @return array List of autoloader functions.
    96          */
    97         function spl_autoload_functions() {
    98                 return $GLOBALS['_wp_spl_autoloaders'];
    99         }
    100 }
     1<?php
     2/**
     3 * Polyfill for SPL autoload feature. This file is separate to prevent compiler notices
     4 * on the deprecated __autoload() function.
     5 *
     6 * See https://core.trac.wordpress.org/ticket/41134
     7 *
     8 * @deprecated 5.3.0 No longer needed as the minimum PHP requirement has moved beyond PHP 5.3.
     9 *
     10 * @package PHP
     11 * @access private
     12 */
     13
     14_deprecated_file( basename( __FILE__ ), '5.3.0', null, 'SPL can no longer be disabled as of PHP 5.3.' );