ClassDoc.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. /**
  3. * @link http://www.yiiframework.com/
  4. * @copyright Copyright (c) 2008 Yii Software LLC
  5. * @license http://www.yiiframework.com/license/
  6. */
  7. namespace yii\apidoc\models;
  8. /**
  9. * Represents API documentation information for a `class`.
  10. *
  11. * @property EventDoc[] $nativeEvents This property is read-only.
  12. *
  13. * @author Carsten Brandt <mail@cebe.cc>
  14. * @since 2.0
  15. */
  16. class ClassDoc extends TypeDoc
  17. {
  18. public $parentClass;
  19. public $isAbstract;
  20. public $isFinal;
  21. /**
  22. * @var string[]
  23. */
  24. public $interfaces = [];
  25. public $traits = [];
  26. // will be set by Context::updateReferences()
  27. public $subclasses = [];
  28. /**
  29. * @var EventDoc[]
  30. */
  31. public $events = [];
  32. /**
  33. * @var ConstDoc[]
  34. */
  35. public $constants = [];
  36. /**
  37. * @inheritdoc
  38. */
  39. public function findSubject($subjectName)
  40. {
  41. if (($subject = parent::findSubject($subjectName)) !== null) {
  42. return $subject;
  43. }
  44. foreach ($this->events as $name => $event) {
  45. if ($subjectName == $name) {
  46. return $event;
  47. }
  48. }
  49. foreach ($this->constants as $name => $constant) {
  50. if ($subjectName == $name) {
  51. return $constant;
  52. }
  53. }
  54. return null;
  55. }
  56. /**
  57. * @return EventDoc[]
  58. */
  59. public function getNativeEvents()
  60. {
  61. $events = [];
  62. foreach ($this->events as $name => $event) {
  63. if ($event->definedBy != $this->name) {
  64. continue;
  65. }
  66. $events[$name] = $event;
  67. }
  68. return $events;
  69. }
  70. /**
  71. * @inheritdoc
  72. */
  73. public function __construct($reflector = null, $context = null, $config = [])
  74. {
  75. parent::__construct($reflector, $context, $config);
  76. if ($reflector === null) {
  77. return;
  78. }
  79. $this->parentClass = ltrim($reflector->getParentClass(), '\\');
  80. if (empty($this->parentClass)) {
  81. $this->parentClass = null;
  82. }
  83. $this->isAbstract = $reflector->isAbstract();
  84. $this->isFinal = $reflector->isFinal();
  85. foreach ($reflector->getInterfaces() as $interface) {
  86. $this->interfaces[] = ltrim($interface, '\\');
  87. }
  88. foreach ($reflector->getTraits() as $trait) {
  89. $this->traits[] = ltrim($trait, '\\');
  90. }
  91. foreach ($reflector->getConstants() as $constantReflector) {
  92. $docblock = $constantReflector->getDocBlock();
  93. if ($docblock !== null && count($docblock->getTagsByName('event')) > 0) {
  94. $event = new EventDoc($constantReflector);
  95. $event->definedBy = $this->name;
  96. $this->events[$event->name] = $event;
  97. } else {
  98. $constant = new ConstDoc($constantReflector);
  99. $constant->definedBy = $this->name;
  100. $this->constants[$constant->name] = $constant;
  101. }
  102. }
  103. }
  104. }