-
Notifications
You must be signed in to change notification settings - Fork 0
/
autoload.php
117 lines (102 loc) · 2.55 KB
/
autoload.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
/**
* Autoload file
*
* @category Autoload
* @package ElementBucket
* @author CodexShaper <info@codexshaper.com>
* @license https://www.gnu.org/licenses/gpl-2.0.html
* @link https://github.com/codexshaper/element-bucket
* @since 1.0.0
*/
namespace CodexShaper\ElementBucket;
if ( ! defined( 'ABSPATH' ) ) {
exit(); // exit if access directly.
}
/**
* Class Autoloader
*
* @category Class
* @package ElementBucket
* @author CodexShaper <info@codexshaper.com>
* @license https://www.gnu.org/licenses/gpl-2.0.html
* @link https://github.com/codexshaper/element-bucket
* @since 1.0.0
*/
class Autoload {
/**
* Instance
*
* @since 1.0.0
* @access private
* @static
* @var \ElementBucket\Autoload The single instance of the class.
*/
private static $instance = null;
/**
* Constructor
*
* Perform some compatibility checks to make sure basic requirements are meet.
* If all compatibility checks pass, initialize the functionality.
*
* @since 1.0.0
* @access public
*/
public function __construct() {
spl_autoload_register( array( $this, 'autoload' ) );
}
/**
* Instance
*
* Ensures only one instance of the class is loaded or can be loaded.
*
* @since 1.0.0
* @access public
* @static
* @return \ElementBucket\Autoload An instance of the class.
*/
public static function instance() {
if ( ! static::$instance ) {
static::$instance = new static();
}
return static::$instance;
}
/**
* Autoload
*
* Autoload all missing classes by their namespace.
*
* @since 1.0.0
* @access private
*
* @param string $class_namespace class name with namespace.
*
* @return void
*/
private function autoload( $class_namespace ) {
if ( 0 !== strpos( $class_namespace, __NAMESPACE__ ) ) {
return;
}
if ( ! class_exists( $class_namespace ) ) {
$file_namespace_path = strtolower(
preg_replace(
array( '/^' . __NAMESPACE__ . '\\\/', '/([a-z])([A-Z])/', '/_/', '/\\\/' ),
array( '', '$1-$2', '-', DIRECTORY_SEPARATOR ),
$class_namespace
)
);
$base_namespace_path = strtolower(
preg_replace(
array( '/^' . __NAMESPACE__ . '\\\/', '/([a-z])([A-Z])/', '/_/', '/\\\/' ),
array( '', '$1-$2', '-', DIRECTORY_SEPARATOR ),
__NAMESPACE__
)
);
$file_path = CS_ELEMENT_BUCKET_PATH . str_replace( $base_namespace_path . DIRECTORY_SEPARATOR, '', $file_namespace_path ) . '.php';
if ( file_exists( $file_path ) && is_readable( $file_path ) ) {
include $file_path;
}
}
}
}
Autoload::instance();