Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor class autoloading #730

Merged
merged 4 commits into from
Oct 28, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 27 additions & 6 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,35 @@
"@prefix-dependencies"
],
"prefix-dependencies": [
"rm -rf php-scoper && mkdir php-scoper",
"cd php-scoper && composer init -q && composer config minimum-stability dev && composer config prefer-stable true && composer require humbug/php-scoper",
"php-scoper/vendor/bin/php-scoper add --output-dir=./third-party --force",
"cd includes && echo '{ \"autoload\": { \"classmap\": [\"\"] } }' > composer.json && composer dump-autoload --classmap-authoritative --no-interaction && rm composer.json",
"cd third-party && echo '{ \"autoload\": { \"classmap\": [\"\"] } }' > composer.json && composer dump-autoload --classmap-authoritative --no-interaction && rm composer.json",
"cp vendor/composer/autoload_files.php third-party/vendor/composer/autoload_files.php",
"rm -rf php-scoper",
"@install-php-scoper",
"php-scoper/vendor/bin/php-scoper add --output-dir=./third-party --force --quiet",
"@autoload-includes",
"@autoload-third-party",
"cp vendor/composer/autoload_files.php third-party/vendor/",
"rm -rf php-scoper"
],
"autoload-includes": [
"echo '{ \"autoload\": { \"classmap\": [\"\"] } }' > includes/composer.json",
"@composer --working-dir=includes dump-autoload --classmap-authoritative --no-interaction",
"cp includes/vendor/composer/autoload_classmap.php includes/",
"rm -rf includes/vendor && rm includes/composer.json",
"mkdir -p includes/vendor/composer && mv includes/autoload_classmap.php includes/vendor/composer/"
],
"autoload-third-party": [
"echo '{ \"autoload\": { \"classmap\": [\"\"] } }' > third-party/composer.json",
"@composer --working-dir=third-party dump-autoload --classmap-authoritative --no-interaction",
"cp third-party/vendor/composer/autoload_classmap.php third-party/",
"rm -rf third-party/vendor && rm third-party/composer.json",
"mkdir -p third-party/vendor/composer && mv third-party/autoload_classmap.php third-party/vendor/composer/"
],
"install-php-scoper": [
"mkdir php-scoper",
"@composer --working-dir=php-scoper init -q",
"@composer --working-dir=php-scoper config minimum-stability dev",
"@composer --working-dir=php-scoper config prefer-stable true",
"@composer --working-dir=php-scoper require humbug/php-scoper"
],
"lint": "vendor/bin/phpcs",
"lint-fix": "vendor/bin/phpcbf"
}
Expand Down
38 changes: 30 additions & 8 deletions includes/loader.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,44 @@
define( 'GOOGLESITEKIT_PLUGIN_BASENAME', plugin_basename( GOOGLESITEKIT_PLUGIN_MAIN_FILE ) );
define( 'GOOGLESITEKIT_PLUGIN_DIR_PATH', plugin_dir_path( GOOGLESITEKIT_PLUGIN_MAIN_FILE ) );

// Autoload files.
require_once GOOGLESITEKIT_PLUGIN_DIR_PATH . 'includes/vendor/autoload.php';
require_once GOOGLESITEKIT_PLUGIN_DIR_PATH . 'third-party/vendor/autoload.php';

/**
* Loads vendor files containing functions etc.
* Loads generated class maps for autoloading.
*
* This integrates with the dependency prefixing script. Its autoloader loads all classes, but not the other files.
* @since 1.0.0
* @access private
*/
function autoload_classes() {
$class_map = array_merge(
// Site Kit classes.
include GOOGLESITEKIT_PLUGIN_DIR_PATH . 'includes/vendor/composer/autoload_classmap.php',
// Third-party classes.
include GOOGLESITEKIT_PLUGIN_DIR_PATH . 'third-party/vendor/composer/autoload_classmap.php'
);

spl_autoload_register(
function ( $class ) use ( $class_map ) {
if ( isset( $class_map[ $class ] ) ) {
require_once $class_map[ $class ];

return true;
}
},
true,
true
);
}
autoload_classes();

/**
* Loads files containing functions from generated file map.
*
* @since 1.0.0
* @access private
*/
function autoload_vendor_files() {
$files = require GOOGLESITEKIT_PLUGIN_DIR_PATH . 'third-party/vendor/composer/autoload_files.php';
// Third-party files.
$files = require GOOGLESITEKIT_PLUGIN_DIR_PATH . 'third-party/vendor/autoload_files.php';
foreach ( $files as $file_identifier => $file ) {
$file = str_replace( 'third-party/vendor', 'third-party', $file );
if ( file_exists( $file ) ) {
require_once $file;
}
Expand Down