Skip to content

Commit bd5fa0b

Browse files
authored
Merge pull request #730 from google/fix/612-class-autoloading
Refactor class autoloading
2 parents 246842c + 80e3bd8 commit bd5fa0b

File tree

2 files changed

+57
-14
lines changed

2 files changed

+57
-14
lines changed

composer.json

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,35 @@
4343
"@prefix-dependencies"
4444
],
4545
"prefix-dependencies": [
46-
"rm -rf php-scoper && mkdir php-scoper",
47-
"cd php-scoper && composer init -q && composer config minimum-stability dev && composer config prefer-stable true && composer require humbug/php-scoper",
48-
"php-scoper/vendor/bin/php-scoper add --output-dir=./third-party --force",
49-
"cd includes && echo '{ \"autoload\": { \"classmap\": [\"\"] } }' > composer.json && composer dump-autoload --classmap-authoritative --no-interaction && rm composer.json",
50-
"cd third-party && echo '{ \"autoload\": { \"classmap\": [\"\"] } }' > composer.json && composer dump-autoload --classmap-authoritative --no-interaction && rm composer.json",
51-
"cp vendor/composer/autoload_files.php third-party/vendor/composer/autoload_files.php",
46+
"rm -rf php-scoper",
47+
"@install-php-scoper",
48+
"php-scoper/vendor/bin/php-scoper add --output-dir=./third-party --force --quiet",
49+
"@autoload-includes",
50+
"@autoload-third-party",
51+
"cp vendor/composer/autoload_files.php third-party/vendor/",
5252
"rm -rf php-scoper"
5353
],
54+
"autoload-includes": [
55+
"echo '{ \"autoload\": { \"classmap\": [\"\"] } }' > includes/composer.json",
56+
"@composer --working-dir=includes dump-autoload --classmap-authoritative --no-interaction",
57+
"cp includes/vendor/composer/autoload_classmap.php includes/",
58+
"rm -rf includes/vendor && rm includes/composer.json",
59+
"mkdir -p includes/vendor/composer && mv includes/autoload_classmap.php includes/vendor/composer/"
60+
],
61+
"autoload-third-party": [
62+
"echo '{ \"autoload\": { \"classmap\": [\"\"] } }' > third-party/composer.json",
63+
"@composer --working-dir=third-party dump-autoload --classmap-authoritative --no-interaction",
64+
"cp third-party/vendor/composer/autoload_classmap.php third-party/",
65+
"rm -rf third-party/vendor && rm third-party/composer.json",
66+
"mkdir -p third-party/vendor/composer && mv third-party/autoload_classmap.php third-party/vendor/composer/"
67+
],
68+
"install-php-scoper": [
69+
"mkdir php-scoper",
70+
"@composer --working-dir=php-scoper init -q",
71+
"@composer --working-dir=php-scoper config minimum-stability dev",
72+
"@composer --working-dir=php-scoper config prefer-stable true",
73+
"@composer --working-dir=php-scoper require humbug/php-scoper"
74+
],
5475
"lint": "vendor/bin/phpcs",
5576
"lint-fix": "vendor/bin/phpcbf"
5677
}

includes/loader.php

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,44 @@
1414
define( 'GOOGLESITEKIT_PLUGIN_BASENAME', plugin_basename( GOOGLESITEKIT_PLUGIN_MAIN_FILE ) );
1515
define( 'GOOGLESITEKIT_PLUGIN_DIR_PATH', plugin_dir_path( GOOGLESITEKIT_PLUGIN_MAIN_FILE ) );
1616

17-
// Autoload files.
18-
require_once GOOGLESITEKIT_PLUGIN_DIR_PATH . 'includes/vendor/autoload.php';
19-
require_once GOOGLESITEKIT_PLUGIN_DIR_PATH . 'third-party/vendor/autoload.php';
20-
2117
/**
22-
* Loads vendor files containing functions etc.
18+
* Loads generated class maps for autoloading.
2319
*
24-
* This integrates with the dependency prefixing script. Its autoloader loads all classes, but not the other files.
20+
* @since 1.0.0
21+
* @access private
22+
*/
23+
function autoload_classes() {
24+
$class_map = array_merge(
25+
// Site Kit classes.
26+
include GOOGLESITEKIT_PLUGIN_DIR_PATH . 'includes/vendor/composer/autoload_classmap.php',
27+
// Third-party classes.
28+
include GOOGLESITEKIT_PLUGIN_DIR_PATH . 'third-party/vendor/composer/autoload_classmap.php'
29+
);
30+
31+
spl_autoload_register(
32+
function ( $class ) use ( $class_map ) {
33+
if ( isset( $class_map[ $class ] ) ) {
34+
require_once $class_map[ $class ];
35+
36+
return true;
37+
}
38+
},
39+
true,
40+
true
41+
);
42+
}
43+
autoload_classes();
44+
45+
/**
46+
* Loads files containing functions from generated file map.
2547
*
2648
* @since 1.0.0
2749
* @access private
2850
*/
2951
function autoload_vendor_files() {
30-
$files = require GOOGLESITEKIT_PLUGIN_DIR_PATH . 'third-party/vendor/composer/autoload_files.php';
52+
// Third-party files.
53+
$files = require GOOGLESITEKIT_PLUGIN_DIR_PATH . 'third-party/vendor/autoload_files.php';
3154
foreach ( $files as $file_identifier => $file ) {
32-
$file = str_replace( 'third-party/vendor', 'third-party', $file );
3355
if ( file_exists( $file ) ) {
3456
require_once $file;
3557
}

0 commit comments

Comments
 (0)