Instance.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace support\lib;
  3. /**
  4. * 单例容器 ,如果不需要 DI容器的可以用次单例模式
  5. * Class Instance
  6. * @package core\lib
  7. */
  8. abstract class Instance
  9. {
  10. /**
  11. * 单例容器
  12. * @var array
  13. */
  14. private static $_instances = [];
  15. /**
  16. * @var null
  17. */
  18. protected static $_class = null;
  19. /**
  20. * 单例模式
  21. * 对象会存入单例容器,随着进程而保持
  22. * @param bool $loadConfig
  23. * @return static
  24. */
  25. final public static function instance($loadConfig = false)
  26. {
  27. self::$_class = get_called_class();
  28. if (!isset(self::$_instances[self::$_class]) or !self::$_instances[self::$_class] instanceof Instance) {
  29. self::$_instances[self::$_class] = new self::$_class($loadConfig);
  30. }
  31. return self::$_instances[self::$_class];
  32. }
  33. /**
  34. * 工厂模式
  35. * 对象不会存入单例容器,随着方法体执行完毕而被PHP GC主动回收
  36. * @param bool $config
  37. * @return static
  38. */
  39. final public static function factory($config = false)
  40. {
  41. $class = get_called_class();
  42. return new $class($config);
  43. }
  44. /**
  45. * 单例容器全清
  46. * 清除后交给PHP GC进行回收
  47. */
  48. final public function instanceClean()
  49. {
  50. foreach (self::$_instances as $key => $instance) {
  51. unset($key);
  52. }
  53. }
  54. }