I think it should be mentioned that using `@method` is valid for non-magic methods as well in a situation where you need to narrow return type for a specific case:

```php
class Model
{
  /**
   * @return Query
   */
  protected static function getQueryInstance()
  {
          return new Query();
  }

  /**
   * @return Query
   */
  public static function find($where)
  {
      // that's method chain so query is returned
      return self::getQueryInstance()->addWhere($where);
  }
}

/**
 * Want IDE autocomplete but don't want to override methods just because of that:
 *
 * @method PostQuery find($where) static
 */
class Post extends Model
{
/**
   * @return PostQuery
   */
  protected static function getQueryInstance()
  {
          return new PostQuery();
  }
}
```