Facade.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | ThinkPHP [ WE CAN DO IT JUST THINK ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2006~2023 http://thinkphp.cn All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8. // +----------------------------------------------------------------------
  9. // | Author: liu21st <liu21st@gmail.com>
  10. // +----------------------------------------------------------------------
  11. namespace think;
  12. /**
  13. * Facade管理类
  14. */
  15. class Facade
  16. {
  17. /**
  18. * 始终创建新的对象实例
  19. * @var bool
  20. */
  21. protected static $alwaysNewInstance;
  22. /**
  23. * 创建Facade实例
  24. * @static
  25. * @access protected
  26. * @param string $class 类名或标识
  27. * @param array $args 变量
  28. * @param bool $newInstance 是否每次创建新的实例
  29. * @return object
  30. */
  31. protected static function createFacade(string $class = '', array $args = [], bool $newInstance = false)
  32. {
  33. $class = $class ?: static::class;
  34. $facadeClass = static::getFacadeClass();
  35. if ($facadeClass) {
  36. $class = $facadeClass;
  37. }
  38. if (static::$alwaysNewInstance) {
  39. $newInstance = true;
  40. }
  41. return Container::getInstance()->make($class, $args, $newInstance);
  42. }
  43. /**
  44. * 获取当前Facade对应类名
  45. * @access protected
  46. * @return string
  47. */
  48. protected static function getFacadeClass()
  49. {
  50. }
  51. /**
  52. * 带参数实例化当前Facade类
  53. * @access public
  54. * @return object
  55. */
  56. public static function instance(...$args)
  57. {
  58. if (__CLASS__ != static::class) {
  59. return self::createFacade('', $args);
  60. }
  61. }
  62. /**
  63. * 调用类的实例
  64. * @access public
  65. * @param string $class 类名或者标识
  66. * @param array|true $args 变量
  67. * @param bool $newInstance 是否每次创建新的实例
  68. * @return object
  69. */
  70. public static function make(string $class, $args = [], $newInstance = false)
  71. {
  72. if (__CLASS__ != static::class) {
  73. return self::__callStatic('make', func_get_args());
  74. }
  75. if (true === $args) {
  76. // 总是创建新的实例化对象
  77. $newInstance = true;
  78. $args = [];
  79. }
  80. return self::createFacade($class, $args, $newInstance);
  81. }
  82. // 调用实际类的方法
  83. public static function __callStatic($method, $params)
  84. {
  85. return call_user_func_array([static::createFacade(), $method], $params);
  86. }
  87. }