【问题标题】:Hint iterator of strict type entities in PHPDocPHPDoc中严格类型实体的提示迭代器
【发布时间】:2015-02-01 10:48:26
【问题描述】:

具体说明

  • 我正在使用 PHPStorm 8 IDE。
  • 假设我们有一些类Foo,它实现了\Iterator 接口,并且我们知道该迭代器中的所有项目都是Bar 类的实例。

问题

如何暗示Foo 是可迭代的并且只包含Bar 的项目?当然,提示应该保留信息,它是Foo的实例

到目前为止我尝试了什么

如果我们有一个Bar 实例数组,那么这很容易(例如,在this 问题中进行了描述):Bar[]。此外,如果打算遍历Foo,它仍然可以(或多或少)解决:

//assume that $foo is instance of Foo
//..

/* @var $object Bar */
foreach ($foo as $object) {
}

但是,有一个非常重要的事情是就地提示无法实现的:返回类型。如果我有一些方法应该返回Foo,我只知道如何提示Foo,但该函数的用户仍然无法公开,它实际上是可迭代的并且包含Bar 实例(如果我指定@return Bar[] 以防Bar 实例的数组,就像这样)

【问题讨论】:

    标签: php phpdoc


    【解决方案1】:

    如果Foo 实现Iterator,那么您可以在Foo::current() 上提示返回类型。 PHPStorm 将识别出Foo::current() 返回的值是当您foreach 超过Foo 时的值。

    例如:

    <?php
    
    class Foo implements Iterator
    {
        // ...
    
        /**
         * @return Bar
         */
        public function current()
        {
            // ...
        }
    
        // ...
    }
    
    $foo = new Foo();
    
    foreach ($foo as $object) {
        // PHPStorm will recognise $object is type Bar.
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-30
      • 2015-12-30
      • 1970-01-01
      • 2010-10-21
      • 2020-07-24
      • 2018-07-15
      • 2017-08-15
      • 2014-08-15
      相关资源
      最近更新 更多