ClassReader.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Code\Reader;
  7. class ClassReader implements ClassReaderInterface
  8. {
  9. /**
  10. * Read class constructor signature
  11. *
  12. * @param string $className
  13. * @return array|null
  14. * @throws \ReflectionException
  15. */
  16. public function getConstructor($className)
  17. {
  18. $class = new \ReflectionClass($className);
  19. $result = null;
  20. $constructor = $class->getConstructor();
  21. if ($constructor) {
  22. $result = [];
  23. /** @var $parameter \ReflectionParameter */
  24. foreach ($constructor->getParameters() as $parameter) {
  25. try {
  26. $result[] = [
  27. $parameter->getName(),
  28. $parameter->getClass() !== null ? $parameter->getClass()->getName() : null,
  29. !$parameter->isOptional() && !$parameter->isDefaultValueAvailable(),
  30. $parameter->isDefaultValueAvailable() ? $parameter->getDefaultValue() : null,
  31. ];
  32. } catch (\ReflectionException $e) {
  33. $message = $e->getMessage();
  34. throw new \ReflectionException($message, 0, $e);
  35. }
  36. }
  37. }
  38. return $result;
  39. }
  40. /**
  41. * Retrieve parent relation information for type in a following format
  42. * array(
  43. * 'Parent_Class_Name',
  44. * 'Interface_1',
  45. * 'Interface_2',
  46. * ...
  47. * )
  48. *
  49. * @param string $className
  50. * @return string[]
  51. */
  52. public function getParents($className)
  53. {
  54. $parentClass = get_parent_class($className);
  55. if ($parentClass) {
  56. $result = [];
  57. $interfaces = class_implements($className);
  58. if ($interfaces) {
  59. $parentInterfaces = class_implements($parentClass);
  60. if ($parentInterfaces) {
  61. $result = array_values(array_diff($interfaces, $parentInterfaces));
  62. } else {
  63. $result = array_values($interfaces);
  64. }
  65. }
  66. array_unshift($result, $parentClass);
  67. } else {
  68. $result = array_values(class_implements($className));
  69. if ($result) {
  70. array_unshift($result, null);
  71. } else {
  72. $result = [];
  73. }
  74. }
  75. return $result;
  76. }
  77. }