#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() . В любом случае, это считается плохой практикой и не рекомендуется.