Exception
2 years ago
AbstractProxyFactory.php
2 years ago
Autoloader.php
2 years ago
Proxy.php
2 years ago
ProxyDefinition.php
2 years ago
ProxyGenerator.php
9 months ago
index.php
2 years ago
Autoloader.php
52 lines
| 1 | <?php |
| 2 | namespace MailPoetVendor\Doctrine\Common\Proxy; |
| 3 | if (!defined('ABSPATH')) exit; |
| 4 | use Closure; |
| 5 | use MailPoetVendor\Doctrine\Common\Proxy\Exception\InvalidArgumentException; |
| 6 | use function call_user_func; |
| 7 | use function file_exists; |
| 8 | use function is_callable; |
| 9 | use function ltrim; |
| 10 | use function spl_autoload_register; |
| 11 | use function str_replace; |
| 12 | use function strlen; |
| 13 | use function strpos; |
| 14 | use function substr; |
| 15 | use const DIRECTORY_SEPARATOR; |
| 16 | class Autoloader |
| 17 | { |
| 18 | public static function resolveFile($proxyDir, $proxyNamespace, $className) |
| 19 | { |
| 20 | if (strpos($className, $proxyNamespace) !== 0) { |
| 21 | throw InvalidArgumentException::notProxyClass($className, $proxyNamespace); |
| 22 | } |
| 23 | // remove proxy namespace from class name |
| 24 | $classNameRelativeToProxyNamespace = substr($className, strlen($proxyNamespace)); |
| 25 | // remove namespace separators from remaining class name |
| 26 | $fileName = str_replace('\\', '', $classNameRelativeToProxyNamespace); |
| 27 | return $proxyDir . DIRECTORY_SEPARATOR . $fileName . '.php'; |
| 28 | } |
| 29 | public static function register($proxyDir, $proxyNamespace, $notFoundCallback = null) |
| 30 | { |
| 31 | $proxyNamespace = ltrim($proxyNamespace, '\\'); |
| 32 | if ($notFoundCallback !== null && !is_callable($notFoundCallback)) { |
| 33 | throw InvalidArgumentException::invalidClassNotFoundCallback($notFoundCallback); |
| 34 | } |
| 35 | $autoloader = static function ($className) use($proxyDir, $proxyNamespace, $notFoundCallback) { |
| 36 | if ($proxyNamespace === '') { |
| 37 | return; |
| 38 | } |
| 39 | if (strpos($className, $proxyNamespace) !== 0) { |
| 40 | return; |
| 41 | } |
| 42 | $file = Autoloader::resolveFile($proxyDir, $proxyNamespace, $className); |
| 43 | if ($notFoundCallback && !file_exists($file)) { |
| 44 | call_user_func($notFoundCallback, $proxyDir, $proxyNamespace, $className); |
| 45 | } |
| 46 | require $file; |
| 47 | }; |
| 48 | spl_autoload_register($autoloader); |
| 49 | return $autoloader; |
| 50 | } |
| 51 | } |
| 52 |