【问题标题】:PHP: Type hinting for one method to declare a few object variables as returnPHP:一种方法的类型提示以将一些对象变量声明为返回
【发布时间】:2015-01-29 18:36:54
【问题描述】:

我正在使用 PHPStorm IDE。我有一个方法可以从我的 mysql 数据库中获取几列并返回一个包含这些值的对象。是否有可能编写一个 PHPDoc 注释,它是类型提示特定值的类型?所以如果我输入

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

IDE 将显示一些变量,我已在方法上方的 PHPDoc 注释中声明了这些变量。

f.e.方法。

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
 */

但不幸的是,这不起作用。是否真的必须为每个变量编写一个 getter 和 setter,或者这可以通过任何 PHPDoc 方式完成吗?

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • php 文档注释 -> /** @var ClassName $object */

标签: php phpstorm type-hinting


【解决方案1】:

基本规则是:

  • 只有一个@return声明
  • 没有变量名
  • 数据类型原样(不使用@前缀)

也就是说,如果您的对象是临时创建的,那么您无能为力。您可能需要创建一个空类来完成代码。例如:

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';
...

【讨论】:

  • 好的,这样就可以了。谢谢你。但是感觉有点脏。可能最好为这几个属性创建一个单独的模型(MVC 模式)。你怎么看?
  • 我想这取决于你的整体设计。自动魔术的东西很棒,但它并不能解决所有需求(否则,手动做事会很愚蠢)。我个人更喜欢代码智能而不是更少的打字,因为我的打字技巧比我的记忆力要好。
【解决方案2】:

我不确定 PHPStorm,但 Netbeans 接受管道符号:

/**
 * 
 * @return A|B
 */

【讨论】:

  • 我试过了,但之后没有打字提示。有 f.e.类型提示,如果我写 @return array|null|\yii\db\ActiveRecord 然后返回可以是数组或 null 并显示命名空间类的属性。但我想要一个具有一些属性的简单对象。
  • null 不是类型,而是值(或者更确切地说是缺少)。我认为您想创建一个fake 未使用的类并将其用于 PHPDoc 中的返回值。
  • 我同意这种类型。但我的问题是关于打字的。你能在这里找到线索吗?
  • 我的想法和阿尔瓦罗的一样。该类不需要在项目本身中。
猜你喜欢
  • 2011-04-18
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多