Composite.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\ObjectManager\Helper;
  7. /**
  8. * Helper for classes which implement Composite pattern.
  9. */
  10. class Composite
  11. {
  12. /**
  13. * @param array $declaredComponents Array of the components which should be registered in the following format:
  14. * <pre>
  15. * [
  16. * ['type' => $firstComponentObject, 'sortOrder' => 15],
  17. * ['type' => $secondComponentObject, 'sortOrder' => 10],
  18. * ...
  19. * ]
  20. * </pre>
  21. * @return array Array of components declarations. Items are sorted and misconfigured ones are removed.
  22. */
  23. public function filterAndSortDeclaredComponents($declaredComponents)
  24. {
  25. /** Eliminate misconfigured components */
  26. $declaredComponents = array_filter(
  27. $declaredComponents,
  28. function ($component) {
  29. return (isset($component['type']) && isset($component['sortOrder']));
  30. }
  31. );
  32. /** Sort all components according to the provided sort order */
  33. uasort(
  34. $declaredComponents,
  35. function ($firstComponent, $secondComponent) {
  36. return (int)$firstComponent['sortOrder'] <=> (int)$secondComponent['sortOrder'];
  37. }
  38. );
  39. $declaredComponents = array_values($declaredComponents);
  40. return $declaredComponents;
  41. }
  42. }