Почему Doxygen возвращает `не найдено однозначно соответствующего члена класса для`, если член класса существует в PHP? - PullRequest
0 голосов
/ 24 января 2020

В моем проекте есть иерархия классов, которая выглядит примерно так:

+-------------+
|   Manager   |
+------+------+
       |
+------+------+
|ClosedManager|
+------+------+
       |
+------+------+
|ConfigManager|
+-------------+

ConfigManager повторно реализует защищенный метод initManager, представленный в Manager

Manager

    /**
     * The construction method for `ManagerInterface` classes
     *
     * @param array $managerConfig
     */
    protected function initManager(array $managerConfig = array()) {
    }

ConfigManager

    /**
     *
     * @inheritdoc
     */
    protected function initManager(array $managerConfig = array()) {
        /** 
         * 
         * @var \DigitalPublications\Midas\Manager\PathsManager $pathsManager
         */
        $pathsManager = $this->options->get('pathsManager', $managerConfig);

        $this->pool['userDefined'] = new Config(array(
            'path' => $pathsManager->get('userDefinedConfig')
        ));
        $this->pool['wordpressOptions'] = new Config(array(
            'path' => $pathsManager->get('wordpressOptionsConfig')
        ));
        $this->pool['productTypesSchemas'] = new Config(array(
            'path' => $pathsManager->get('productTypesSchemasConfig'),
            'canReturnAll' => FALSE,
        ));
    }

Когда я запускаю Doxygen, я получаю эту ошибку

ConfigManager.php:27: warning: no uniquely matching class member found 
for initManager(array $managerConfig=array())

1 Ответ

0 голосов
/ 24 января 2020

ОБНОВЛЕНИЕ:

TL; DR

Не используйте /** */ в теле методов.

Во время написания вопроса я проводил несколько тестов и, похоже, проблема заключалась в стиле комментария в теле метода дочернего класса ConfigManager::initManager

/** 
 * 
 * @var \DigitalPublications\Midas\Manager\PathsManager $pathsManager
 */

Если вы измените стиль комментария на // таким образом, он становится

// @var \DigitalPublications\Midas\Manager\PathsManager $pathsManager

, он работает как ожидалось.

Вы можете добавить тег @internal в блоке комментариев, чтобы вы могли документировать тело метода и не путать Doxygen

/**
 * @internal
 * @var \DigitalPublications\Midas\Manager\PathsManager $pathsManager
*/
...