Рассмотрим следующий код:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Car extends Model
{
public static function getTheFirstCar(string $color): ?self
{
/** @var ?self */ // <-- Doesn't apply! Is there any alternative?
return (new self())->newQuery()->firstWhere('color', '=', $color);
}
}
Код работает правильно; тем не менее PhpStorm жалуется:
Ожидается, что возвращаемое значение будет '
Car|null
',
возвращено '\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model
'
Присвоение результата выражения аннотированной переменной устраняет предупреждение, но при этом вводит избыточную переменную!
/** @var ?self $redundant */
$redundant = (new self())->newQuery()->firstWhere('color', '=', $color);
return $redundant;
Итак, есть ли в PhpStorm способ применить встроенную аннотацию типа для значения выражения оператора return
явно как Car|null
, не вводя избыточную переменную или не указывая все ожидаемые возвращаемые типы?
@return ?static|Model
над методом. Сама проблема выглядит как эта ошибка - person Dmitrii   schedule 05.03.2021Model
(метод возвращает толькоCar
илиnull
) - person goodUser   schedule 07.03.2021/** @var ?self */
перед оператором возврата (что соответствует тому, что мне нужно); или добавление нерелевантного к контексту типаModel
- что я объяснил!) - person goodUser   schedule 09.03.2021file > invalidate Caches/Restart...
- person Dmitry   schedule 09.03.2021