1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* An example of a project-specific implementation. |
4
|
|
|
* |
5
|
|
|
* After registering this autoload function with SPL, the following line |
6
|
|
|
* would cause the function to attempt to load the \Foo\Bar\Baz\Qux class |
7
|
|
|
* from /path/to/project/src/Baz/Qux.php: |
8
|
|
|
* |
9
|
|
|
* new \Foo\Bar\Baz\Qux; |
10
|
|
|
* |
11
|
|
|
* @param string $class The fully-qualified class name. |
12
|
|
|
* @return void |
13
|
|
|
*/ |
14
|
|
|
spl_autoload_register( |
15
|
|
View Code Duplication |
function ($class) { |
|
|
|
|
16
|
|
|
// project-specific namespace prefix |
17
|
|
|
$prefix = 'Anax\\'; |
18
|
|
|
// base directory for the namespace prefix |
19
|
|
|
$base_dir = __DIR__ . '/src/'; |
20
|
|
|
// does the class use the namespace prefix? |
21
|
|
|
$len = strlen($prefix); |
22
|
|
|
if (strncmp($prefix, $class, $len) !== 0) { |
23
|
|
|
// no, move to the next registered autoloader |
24
|
|
|
return; |
25
|
|
|
} |
26
|
|
|
// get the relative class name |
27
|
|
|
$relative_class = substr($class, $len); |
28
|
|
|
// replace the namespace prefix with the base directory, replace namespace |
29
|
|
|
// separators with directory separators in the relative class name, append |
30
|
|
|
// with .php |
31
|
|
|
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php'; |
32
|
|
|
// if the file exists, require it |
33
|
|
|
if (file_exists($file)) { |
34
|
|
|
include $file; |
35
|
|
|
} |
36
|
|
|
} |
37
|
|
|
); |
38
|
|
|
|
39
|
|
|
|
40
|
|
|
// autoloader for 'Psr\' |
41
|
|
|
spl_autoload_register( |
42
|
|
View Code Duplication |
function ($class) { |
|
|
|
|
43
|
|
|
// project-specific namespace prefix |
44
|
|
|
$prefix = 'Psr\\'; |
45
|
|
|
// base directory for the namespace prefix |
46
|
|
|
$base_dir = __DIR__ . '/src/'; |
47
|
|
|
// does the class use the namespace prefix? |
48
|
|
|
$len = strlen($prefix); |
49
|
|
|
if (strncmp($prefix, $class, $len) !== 0) { |
50
|
|
|
// no, move to the next registered autoloader |
51
|
|
|
return; |
52
|
|
|
} |
53
|
|
|
// get the relative class name |
54
|
|
|
$relative_class = substr($class, $len); |
55
|
|
|
// replace the namespace prefix with the base directory, replace namespace |
56
|
|
|
// separators with directory separators in the relative class name, append |
57
|
|
|
// with .php |
58
|
|
|
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php'; |
59
|
|
|
// if the file exists, require it |
60
|
|
|
if (file_exists($file)) { |
61
|
|
|
include $file; |
62
|
|
|
} |
63
|
|
|
} |
64
|
|
|
); |
65
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.