Factory.php 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <?php
  2. namespace Qii\Autoloader;
  3. use \Qii\Exceptions;
  4. class Factory
  5. {
  6. /**
  7. * @param array $_instance 实例化对象的存储池
  8. */
  9. protected static $instance = [];
  10. /**
  11. * 以 new \Qii\Autoloader\Factory($className)的方式实例化对象
  12. */
  13. public function __construct($className)
  14. {
  15. return Factory::getInstance($className);
  16. }
  17. /**
  18. * 实例化对象
  19. * @param string $className 类名
  20. */
  21. public static function getInstance($className)
  22. {
  23. if(!$className)
  24. {
  25. return \Qii::e('CLASS_NAME_IS_NULL', $className);
  26. }
  27. if(isset(Factory::$instance[$className]) &&
  28. Factory::$instance[$className] != null
  29. ){
  30. return Factory::$instance[$className];
  31. }
  32. if(class_exists($className, false))
  33. {
  34. return Factory::$instance[$className] = new $className;
  35. }
  36. $className = Psr4::getInstance()->getClassName($className);
  37. return Factory::$instance[$className] = new $className;
  38. }
  39. }