namespace ImageOptimization;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
* @var Plugin The single instance of the class.
public static $instance = null;
public $modules_manager = null;
private $classes_aliases = [];
* Ensures only one instance of the class is loaded or can be loaded.
* @return Plugin An instance of the class.
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
public function autoload( $class ) {
if ( 0 !== strpos( $class, __NAMESPACE__ ) ) {
$has_class_alias = isset( $this->classes_aliases[ $class ] );
// Backward Compatibility: Save old class name for set an alias after the new class is loaded
if ( $has_class_alias ) {
$class_alias_name = $this->classes_aliases[ $class ];
$class_to_load = $class_alias_name;
if ( ! class_exists( $class_to_load ) ) {
[ '/^' . __NAMESPACE__ . '\\\/', '/([a-z])([A-Z])/', '/_/', '/\\\/' ],
[ '', '$1-$2', '-', DIRECTORY_SEPARATOR ],
$filename = IMAGE_OPTIMIZATION_PATH . $filename . '.php';
if ( is_readable( $filename ) ) {
if ( $has_class_alias ) {
class_alias( $class_alias_name, $class );
private function includes() {
require_once IMAGE_OPTIMIZATION_PATH . 'includes/modules-manager.php';
$this->modules_manager = new Manager();
* Plugin class constructor
* Register plugin action hooks and filters
public function __construct() {
static $autoloader_registered = false;
if ( ! $autoloader_registered ) {
$autoloader_registered = spl_autoload_register( [ $this, 'autoload' ] );
// Instantiate Plugin Class