Динамически созданные объекты (factory Method)

Рейтинг: 1Ответов: 1Опубликовано: 20.10.2014

Добрый день.

Скажите, есть ли возможность при помощи PhpDoc комментировать методы, которые возвращают динамически сгенерированные объекты. Нужно это для вызова подсказок в IDE PhpStrom.

Конструкция вида @return first|second не очень удобна, так как количество генерируемых объектов не ограничено.

Примитивный пример:

class first {

    function getMain() {
        return 'Hello';
    }
}

class second {
    function getSecond() {
        return "SeconD";
    }
}

/**
 * @param $name
 *
 */
function getClass( $name ) {
    return new $name;
}
$class = getClass( 'first' );

Спасибо за помощь!

Ответы

▲ 4Принят

Чтобы заработали подсказки в phpStorm, надо использовать файл .phpstorm.meta.php:

<?php
namespace PHPSTORM_META { // we want to avoid the pollution

    /** @noinspection PhpUnusedLocalVariableInspection */
    /** @noinspection PhpIllegalArrayKeyTypeInspection */
    $STATIC_METHOD_TYPES = [
        \ORM::factory('') => [
            'File' instanceof \Model_File,
            'Gallery' instanceof \Model_Gallery,
            'User' instanceof \Model_User,
            // ...
        ],
    ];
}

Этот пример указывает, с объектом какого класса будет происходить работа после вызовов, вроде:

ORM::factory('User')->...

Файл надо добавить в корень проекта и перезапустить IDE.
Как заточить конкретно под ваш пример с функцией, я не скажу, но можете посмотреть документацию по этому файлу где-то тут: PhpStorm Advanced Metadata.