Почему ошибка PHPDoc в PhpStorm возникает из-за этого кода?

#php #phpdoc

#php #phpdoc

Вопрос:

В следующем коде @return подчеркнуто красным. Я ожидаю, что будет возвращен интерфейс, потому что это то, что реализуют все адаптеры разных поставщиков.

  /**
 * VendorFactory constructor.
 * @param Model $model
 * @return TradersInterfacesVendorAdapterInterface
 */
public function __construct(Model $model)
{
    return $this->createAdapter($model);
}
  

Это код для createAdapter, в котором нет @return, подчеркнутого красным.

 /**
 * @param Model $model
 * @return TradersInterfacesVendorAdapterInterface
 */
public function createAdapter(Model $model)
{
    $type = str_replace('AppModels\', '', get_class($model)).'s';
    $fqcn = 'TradersAdapters\'.$type.'\'.ucfirst(strtolower($model->name));
    return new $fqcn($model);
}
  

Я попытался выполнить /** docblock и позволить PhpStorm ввести то, что он считает возвращаемым значением, и он просто продолжает выдавать мне

 @return mixed
  

Комментарии:

1. $fqcn В данном случае Because является переменной. На самом деле вы не присваиваете ему конкретный класс. Игнорируйте storm и оставьте его как есть или создайте фабрику.

2. Подождите, что .. return в конструкторе?

3. спасибо, Пит, это должен был быть не конструктор, а метод инициализации.

Ответ №1:

Ваша проблема return в конструкторе. Конструкторы не принимают возвращаемые значения, они выполняются при создании экземпляра этого класса.

Комментарии:

1. спасибо, что моя ошибка не должна была быть в конструкторе, должен был быть метод инициализации 🙂

2. Рад помочь! Честно говоря, я думаю, что технически вы можете установить возвращаемые значения для функций __construct (потому что они такие же, как обычные функции) и использовать их как $ret = $obj-> __construct() . В любом случае, это считается плохой практикой и не рекомендуется.