[wp-trac] [WordPress Trac] #36335: Next generation: core autoloader proposal

WordPress Trac noreply at wordpress.org
Thu Mar 31 14:56:05 UTC 2016

#36335: Next generation: core autoloader proposal
 Reporter:  dnaber-de        |       Owner:
     Type:  feature request  |      Status:  new
 Priority:  normal           |   Milestone:  Future Release
Component:  General          |     Version:
 Severity:  normal           |  Resolution:
 Keywords:                   |     Focuses:

Comment (by giuseppe.mazzapica):

 Hi all,

 I have a major concerns here.

 The first one is that most of core files containing classes, does not
 ''just'' contain classes.

 In fact, many of them also contain function definitions, function calls,
 constants definitions... and so on. All things that actually force those
 file to be required eagerly (no autoload).

 The other concern is that some files contain more than one class. It means
 those files does not follow WordPress coding standard

 > class file names should be based on the class name with class- prepended
 and the underscores in the class name replaced with hyphens, for example
 `WP_Error` becomes: `class-wp-error.php`

 An example (among literally dozens) the class `WP_MatchesMapRegex` is
 located in a file named `class-wp.php` that is so named because ''also''
 contains the class `WP`.

 Not to talk about some classes that are placed pretty much arbitrarily:
 `wpdb` class is in `wp-db.php` and `WP_Query` class is in `query.php`.

 A "sane" autoload will need:

 - to be able to easily match a class to a file name. This can be achieved
 by having one class per file, following coding standards for naming
 - don't be forced to hard-require files because of function / constant
 definitions or client code. This can be achieved by putting only class
 definitions in class files.

 Until those things are done, we can have only a deficient autoloader.

 To be fair, the first point could be achieved implementing a map from
 class to file name:

 function wp_autoload_map() {
   global $wp_autoload_map;
   if ( ! $wp_autoload_map ) {
     $wp_autoload_map = array(
       'WP'                 => 'wp.php',
       'WP_MatchesMapRegex' => 'wp.php',
       'WP_Query'           => 'query.php',
       'wpdb'               => 'wp-db.php',
       // and other 257 entries here...
   return $wp_autoload_map;

 but this not the best solution ever and does not solve the issue of
 function / constants definition and client code in files that contain
 class definitions...

Ticket URL: <https://core.trac.wordpress.org/ticket/36335#comment:10>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform

More information about the wp-trac mailing list