PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 6.2.5
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v6.2.5
6.2.14 6.2.13 6.2.12 6.2.10 6.2.11 6.2.9 6.2.8 6.2.7 6.2.6 6.2.5 6.2.4 6.2.3 6.2.2 3.6.22 3.6.31 3.6.40 3.6.41 3.6.42 3.6.50 3.6.51 3.6.60 3.6.61 3.6.62 3.6.64 3.6.65 All 196 releases
fluentform / app / Services / Spout / Autoloader / Psr4Autoloader.php

Psr4Autoloader.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 6.2.5, at app/Services/Spout/Autoloader/Psr4Autoloader.php

151 lines 4.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Box\Spout\Autoloader;
4
5 /**
6 * Class Psr4Autoloader
7 * @see https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md#class-example
8 *
9 * @package Box\Spout\Autoloader
10 */
11 class Psr4Autoloader
12 {
13 /**
14 * An associative array where the key is a namespace prefix and the value
15 * is an array of base directories for classes in that namespace.
16 *
17 * @var array
18 */
19 protected $prefixes = array();
20
21 /**
22 * Register loader with SPL autoloader stack.
23 *
24 * @return void
25 */
26 public function register()
27 {
28 spl_autoload_register(array($this, 'loadClass'));
29 }
30
31 /**
32 * Adds a base directory for a namespace prefix.
33 *
34 * @param string $prefix The namespace prefix.
35 * @param string $baseDir A base directory for class files in the
36 * namespace.
37 * @param bool $prepend If true, prepend the base directory to the stack
38 * instead of appending it; this causes it to be searched first rather
39 * than last.
40 * @return void
41 */
42 public function addNamespace($prefix, $baseDir, $prepend = false)
43 {
44 // normalize namespace prefix
45 $prefix = trim($prefix, '\\') . '\\';
46
47 // normalize the base directory with a trailing separator
48 $baseDir = rtrim($baseDir, DIRECTORY_SEPARATOR) . '/';
49
50 // initialize the namespace prefix array
51 if (isset($this->prefixes[$prefix]) === false) {
52 $this->prefixes[$prefix] = array();
53 }
54
55 // retain the base directory for the namespace prefix
56 if ($prepend) {
57 array_unshift($this->prefixes[$prefix], $baseDir);
58 } else {
59 array_push($this->prefixes[$prefix], $baseDir);
60 }
61 }
62
63 /**
64 * Loads the class file for a given class name.
65 *
66 * @param string $class The fully-qualified class name.
67 * @return mixed The mapped file name on success, or boolean false on
68 * failure.
69 */
70 public function loadClass($class)
71 {
72 // the current namespace prefix
73 $prefix = $class;
74
75 // work backwards through the namespace names of the fully-qualified
76 // class name to find a mapped file name
77 while (false !== $pos = strrpos($prefix, '\\')) {
78
79 // retain the trailing namespace separator in the prefix
80 $prefix = substr($class, 0, $pos + 1);
81
82 // the rest is the relative class name
83 $relativeClass = substr($class, $pos + 1);
84
85 // try to load a mapped file for the prefix and relative class
86 $mappedFile = $this->loadMappedFile($prefix, $relativeClass);
87 if ($mappedFile !== false) {
88 return $mappedFile;
89 }
90
91 // remove the trailing namespace separator for the next iteration
92 // of strrpos()
93 $prefix = rtrim($prefix, '\\');
94 }
95
96 // never found a mapped file
97 return false;
98 }
99
100 /**
101 * Load the mapped file for a namespace prefix and relative class.
102 *
103 * @param string $prefix The namespace prefix.
104 * @param string $relativeClass The relative class name.
105 * @return mixed Boolean false if no mapped file can be loaded, or the
106 * name of the mapped file that was loaded.
107 */
108 protected function loadMappedFile($prefix, $relativeClass)
109 {
110 // are there any base directories for this namespace prefix?
111 if (isset($this->prefixes[$prefix]) === false) {
112 return false;
113 }
114
115 // look through base directories for this namespace prefix
116 foreach ($this->prefixes[$prefix] as $baseDir) {
117
118 // replace the namespace prefix with the base directory,
119 // replace namespace separators with directory separators
120 // in the relative class name, append with .php
121 $file = $baseDir
122 . str_replace('\\', '/', $relativeClass)
123 . '.php';
124
125 // if the mapped file exists, require it
126 if ($this->requireFile($file)) {
127 // yes, we're done
128 return $file;
129 }
130 }
131
132 // never found it
133 return false;
134 }
135
136 /**
137 * If a file exists, require it from the file system.
138 *
139 * @param string $file The file to require.
140 * @return bool True if the file exists, false if not.
141 */
142 protected function requireFile($file)
143 {
144 if (file_exists($file)) {
145 require $file;
146 return true;
147 }
148 return false;
149 }
150 }
151