当前位置:Gxlcms > PHP教程 > php对象工厂类

php对象工厂类

时间:2021-07-01 10:21:17 帮助过:8人阅读

  1. <!--?php
  2. /**
  3. * 对象工厂
  4. * @author flynetcn
  5. */
  6. class ObjectFactory
  7. {
  8. private static $objSet = array();
  9. /**
  10. * 清空工厂中的对象
  11. */
  12. public function clear()
  13. {
  14. self::$objSet = array();
  15. }
  16. /**
  17. * 在工厂中创建对象并将其返回
  18. * 参数格式:$class_name, $class_param1, $class_param2, ...
  19. */
  20. public static function create()
  21. {
  22. $argc = func_num_args();
  23. if ($argc <= 0) {
  24. throw new Exception('params error', 1);
  25. }
  26. $args = func_get_args();
  27. $class_name = array_shift($args);
  28. $params = $args;
  29. if (!$params) {
  30. $class_sign = $class_name;
  31. } else {
  32. $param_sign = serialize($params);
  33. if (strlen($param_sign) --> 100) {
  34. $param_sign = md5($param_sign);
  35. }
  36. $class_sign = $class_name.'@'.$param_sign;
  37. }
  38. if (isset(self::$objSet[$class_sign])) {
  39. return self::$objSet[$class_sign];
  40. }
  41. $ref = new ReflectionClass($class_name);
  42. if ($ref->hasMethod('__construct') && !empty($params)) {
  43. $obj = $ref->newInstanceArgs($params);
  44. } else {
  45. $obj = $ref->newInstance();
  46. }
  47. self::$objSet[$class_sign] = $obj;
  48. return $obj;
  49. }
  50. }

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了php对象工厂类,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

人气教程排行