Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 

72 rader
1.4 KiB

  1. <?php
  2. namespace Kuxin;
  3. use Kuxin\Helper\Serialize;
  4. /**
  5. * Class Loader
  6. *
  7. * @package Kuxin
  8. * @author Pakey <pakey@qq.com>
  9. */
  10. class Loader
  11. {
  12. /**
  13. * @var array
  14. */
  15. static $_importFiles = [];
  16. /**
  17. * @var array
  18. */
  19. static $_class = [];
  20. /**
  21. * 加载文件
  22. *
  23. * @param string $filename
  24. * @return mixed
  25. */
  26. public static function import(string $filename)
  27. {
  28. if (!isset(self::$_importFiles[$filename])) {
  29. if (is_file($filename)) {
  30. self::$_importFiles[$filename] = require $filename;
  31. } else {
  32. return false;
  33. }
  34. }
  35. return self::$_importFiles[$filename];
  36. }
  37. /**
  38. * 初始化类
  39. * @param string $class
  40. * @param array $args
  41. * @return mixed
  42. */
  43. public static function instance(string $class, array $args = [])
  44. {
  45. $key = md5($class . '_' . Serialize::encode($args));
  46. if (empty(self::$_class[$key])) {
  47. try {
  48. self::$_class[$key] = (new \ReflectionClass($class))->newInstanceArgs($args);;
  49. } catch (\Exception $e) {
  50. return false;
  51. }
  52. }
  53. return self::$_class[$key];
  54. }
  55. /**
  56. * @param $classname
  57. */
  58. public static function autoload($classname): void
  59. {
  60. $file = KX_ROOT . '/' . strtr(strtolower($classname), '\\', '/') . '.php';
  61. Loader::import($file);
  62. }
  63. }