Advertisement
Guest User

Untitled

a guest
Jul 4th, 2015
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. <?php
  2. /**
  3. * Universal Object factory ... well kinda :p
  4. *
  5. * @author nimmneun
  6. * @since 06.06.2015 03:07
  7. */
  8. class Trunk
  9. {
  10. /**
  11. * @var object[]
  12. */
  13. private $objects = array();
  14.  
  15. /**
  16. * @var array with class dependencies.
  17. */
  18. private $dependencies = array(
  19. 'App' => array(
  20. 'Keyword',
  21. 'Check',
  22. 'Config',
  23. 'UniCurl',
  24. ),
  25. 'Keyword' => array(
  26. 'Database',
  27. 'Validator',
  28. ),
  29. 'Database' => array(
  30. 'Config',
  31. 'PDO',
  32. ),
  33. );
  34.  
  35. /**
  36. * @param string $objectName is case sensitive!
  37. * @return object
  38. * @throws TrunkException
  39. */
  40. public function get($objectName)
  41. {
  42. $dependencies = range(0,2);
  43. $i = 0;
  44.  
  45. if (isset($this->objects[$objectName])
  46. && $this->objects[$objectName] instanceof $objectName)
  47. {
  48. $desiredObject = $this->objects[$objectName];
  49. }
  50. else
  51. {
  52. try
  53. {
  54. if (isset($this->dependencies[$objectName]))
  55. {
  56. foreach ($this->dependencies[$objectName] as $dependencyName)
  57. {
  58. $dependencies[$i++] = $this->get($dependencyName);
  59. }
  60. }
  61. $this->objects[$objectName] = $desiredObject = new $objectName($dependencies[0], $dependencies[1], $dependencies[2]);
  62. }
  63. catch (Exception $e)
  64. {
  65. throw new TrunkException('Unresolvable dependencies: '. $e->getMessage());
  66. // todo: $this->getComplex($objectName);
  67. }
  68. }
  69.  
  70. return $desiredObject;
  71. }
  72. }
  73.  
  74. class TrunkException extends Exception {}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement