Я работаю с PHPStorm IDE. У меня есть метод, который извлекает несколько столбцов из базы данных mysql и возвращает объект, содержащий эти значения. Есть ли возможность написать комментарий PHPDoc, тип которого намекает на конкретные значения? Так что, если я наберу

Self::getCommissionFromCacheOrDb($provider_id, $type, $platform)->

IDE покажет мне несколько переменных, которые я объявил в комментарии PHPDoc над методом.

Например метод.

public static getValuesFromDb($provider_id){
            $data = self::find()->where(['provider_id' => $provider_id,
                    'revision' => '0000-00-00 00:00:00',
                    'platform' => $platform,
                    'type' => $type])
                ->select(['commission',
                        'direct_commission',
                        'super_commission',
                        'super_commission_maturity',
                        'valid_from',
                        'valid_to'])
                ->one();
            return $data;
}

Я мог бы представить себе какой-нибудь блок PHPDoc, например

/**
 * @return $direct_commission
 * @return @super_commission
 * @return @super_commission
 * @return @valid_from
 * @return @valid_to
 */

Но, к сожалению, это не работает. Действительно ли необходимо писать геттер и сеттер для каждой переменной или это можно сделать любым способом PHPDoc?

Любая помощь была бы признательна.

Благодарность

1
technergy 1 Дек 2014 в 20:22
Php doc comment -> /** @var ClassName $object */
 – 
Marco Mura
1 Дек 2014 в 20:25

2 ответа

Основные правила:

  • Только один оператор @return
  • Нет имени переменной
  • Тип данных как есть (без использования префикса @)

Сказал, что вы мало что можете сделать, если ваш объект создан ad-hoc. Возможно, вам потребуется создать пустой класс только для завершения кода. например.:

class Comission{
    public $commission;
    public $direct_commission;
    public $super_commission;
    public $super_commission_maturity;
    public $valid_from;
    public $valid_to;
}

... а также:

/**
 * @return Comission
 */

Сам PhpStorm довольно часто использует этот прием для документирования встроенных классов и функций:

/**
 * Representation of date and time.
 * @link http://php.net/manual/en/class.datetime.php
 */
class DateTime implements DateTimeInterface {
    const ATOM = 'Y-m-d\TH:i:sP';
    const COOKIE = 'l, d-M-y H:i:s T';
...
2
Álvaro González 1 Дек 2014 в 20:34
Хорошо, так это работает. Спасибо. Но он чувствует себя немного грязным. Вероятно, лучше создать отдельную модель (шаблон MVC) только для этих нескольких свойств. Как вы думаете?
 – 
technergy
2 Дек 2014 в 17:15
Я думаю, это зависит от вашего общего дизайна. Автомагия — это круто, но она не решает всех задач (иначе было бы глупо делать что-то вручную). Лично я предпочитаю анализ кода меньшему набору текста, потому что мои навыки набора текста лучше, чем моя память.
 – 
Álvaro González
2 Дек 2014 в 18:28

Я не уверен насчет PHPStorm, но Netbeans принимает знак трубы:

/**
 * 
 * @return A|B
 */
0
Marek 1 Дек 2014 в 20:26
Я пробовал это, но после этого нет подсказок. Есть ф.е. подсказка типа, если я пишу @return array|null|\yii\db\ActiveRecord, тогда возвращаемым значением может быть либо массив, либо нуль, и отображаются свойства класса с пространством имен. Но мне нужен простой объект с несколькими атрибутами.
 – 
technergy
1 Дек 2014 в 20:36
1
null - это не тип, а значение (точнее его отсутствие). Я думаю, вы хотите создать неиспользуемый класс fake и использовать его для возвращаемого значения в PHPDoc.
 – 
Marek
1 Дек 2014 в 20:46
Насчет типа согласен. Но мой вопрос о typehinting. Может у вас есть ключ здесь?
 – 
technergy
2 Дек 2014 в 17:16
Моя идея была такой же, как у Альваро. Класс не обязательно должен быть в самом проекте.
 – 
Marek
2 Дек 2014 в 17:53