PluginProbe
Hostinger Tools / 3.0.78
Hostinger Tools v3.0.78
3.0.78 3.0.77 3.0.76 3.0.75 3.0.74 3.0.73 3.0.72 3.0.71 3.0.70 3.0.69 3.0.68 3.0.67 3.0.66 1.8.1 1.8.2 1.8.3 1.9.1 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 All 109 releases
hostinger / vendor / automattic / jetpack-autoloader / src / class-autoloader.php

class-autoloader.php in Hostinger Tools 3.0.78, at vendor/automattic/jetpack-autoloader/src/class-autoloader.php

86 lines 4.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /* HEADER */ // phpcs:ignore
3
4 /**
5 * This class handles management of the actual PHP autoloader.
6 */
7 class Autoloader {
8
9 /**
10 * Checks to see whether or not the autoloader should be initialized and then initializes it if so.
11 *
12 * @param Container|null $container The container we want to use for autoloader initialization. If none is given
13 * then a container will be created automatically.
14 */
15 public static function init( $container = null ) {
16 // The container holds and manages the lifecycle of our dependencies
17 // to make them easier to work with and increase flexibility.
18 if ( ! isset( $container ) ) {
19 require_once __DIR__ . '/class-container.php';
20 $container = new Container();
21 }
22
23 // phpcs:disable Generic.Commenting.DocComment.MissingShort
24
25 /** @var Autoloader_Handler $autoloader_handler */
26 $autoloader_handler = $container->get( Autoloader_Handler::class );
27
28 // If the autoloader is already initializing it means that it has included us as the latest.
29 $was_included_by_autoloader = $autoloader_handler->is_initializing();
30
31 /** @var Plugin_Locator $plugin_locator */
32 $plugin_locator = $container->get( Plugin_Locator::class );
33
34 /** @var Plugins_Handler $plugins_handler */
35 $plugins_handler = $container->get( Plugins_Handler::class );
36
37 // The current plugin is the one that we are attempting to initialize here.
38 $current_plugin = $plugin_locator->find_current_plugin();
39
40 // The active plugins are those that we were able to discover on the site. This list will not
41 // include mu-plugins, those activated by code, or those who are hidden by filtering. We also
42 // want to take care to not consider the current plugin unknown if it was included by an
43 // autoloader. This avoids the case where a plugin will be marked "active" while deactivated
44 // due to it having the latest autoloader.
45 $active_plugins = $plugins_handler->get_active_plugins( true, ! $was_included_by_autoloader );
46
47 // The cached plugins are all of those that were active or discovered by the autoloader during a previous request.
48 // Note that it's possible this list will include plugins that have since been deactivated, but after a request
49 // the cache should be updated and the deactivated plugins will be removed.
50 $cached_plugins = $plugins_handler->get_cached_plugins();
51
52 // We combine the active list and cached list to preemptively load classes for plugins that are
53 // presently unknown but will be loaded during the request. While this may result in us considering packages in
54 // deactivated plugins there shouldn't be any problems as a result and the eventual consistency is sufficient.
55 $all_plugins = array_merge( $active_plugins, $cached_plugins );
56
57 // In particular we also include the current plugin to address the case where it is the latest autoloader
58 // but also unknown (and not cached). We don't want it in the active list because we don't know that it
59 // is active but we need it in the all plugins list so that it is considered by the autoloader.
60 $all_plugins[] = $current_plugin;
61
62 // We require uniqueness in the array to avoid processing the same plugin more than once.
63 $all_plugins = array_values( array_unique( $all_plugins ) );
64
65 /** @var Latest_Autoloader_Guard $guard */
66 $guard = $container->get( Latest_Autoloader_Guard::class );
67 if ( $guard->should_stop_init( $current_plugin, $all_plugins, $was_included_by_autoloader ) ) {
68 return;
69 }
70
71 // Initialize the autoloader using the handler now that we're ready.
72 $autoloader_handler->activate_autoloader( $all_plugins );
73
74 /** @var Hook_Manager $hook_manager */
75 $hook_manager = $container->get( Hook_Manager::class );
76
77 // Register a shutdown handler to clean up the autoloader.
78 $hook_manager->add_action( 'shutdown', new Shutdown_Handler( $plugins_handler, $cached_plugins, $was_included_by_autoloader ) );
79
80 // Register a plugins_loaded handler to check for conflicting autoloaders.
81 $hook_manager->add_action( 'plugins_loaded', array( $guard, 'check_for_conflicting_autoloaders' ), 1 );
82
83 // phpcs:enable Generic.Commenting.DocComment.MissingShort
84 }
85 }
86