gpt4 book ai didi

PhpStorm:有没有办法使用内联 PHPDoc 注释在 return 语句上强制执行类型?

转载 作者:行者123 更新时间:2023-12-03 11:22:46 28 4
gpt4 key购买 nike

考虑以下代码:

<?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 提示:

Return value is expected to be 'Car|null',
'\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model' returned

PhpStorm PHPDoc Type Annotation on return statement


将表达式的结果赋值给一个带注释的变量可以解决警告,但会引入一个“冗余”变量!
/** @var ?self $redundant */
$redundant = (new self())->newQuery()->firstWhere('color', '=', $color);
return $redundant;
那么,PhpStorm 中是否有一种方法可以为 return 的值强制执行内联类型注释?语句表达式明确为 Car|null , 不引入冗余变量或指定所有预期的返回类型?

最佳答案

您可以通过添加 @noinspection PhpIncompatibleReturnTypeInspection 来抑制此警告。声明前的注释。
我个人不会这样做 ,但这是您关于如何“强制”返回类型并抑制警告 afaik 问题的唯一答案。

    /** @noinspection PhpIncompatibleReturnTypeInspection */
return (new self())->newQuery()->where('color', '=', $color)->first();
如果您决定遵守警告 ,那么这可能是它的原因和解决方案: newQuery()将在模型表上创建一个新查询(最有可能是: cars )而不设置适当的模型( Car )。
在内部,您现在在 cars 上运行裸查询.因此,您将收到适当的记录,但不会是 Car 的实例。 ,但是 Model 的一个实例反而。因此,PhpStorm 期望这里有多个额外的返回类型,并在您的语句上打印此警告,因为它不同于方法返回类型 ?self .
快速解决方案是更改 newQuery()进入 newModelQuery() .这将创建一个新查询并设置模型 Car在创建的查询上并返回适当的实例或 null
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Car extends Model
{
public static function getTheFirstCar(string $color): ?self
{
return (new self())->newModelQuery()->firstWhere('color', '=', $color);
// I'd use this statement though:
// return self::where('color', '=', $color)->first();
}
}

关于PhpStorm:有没有办法使用内联 PHPDoc 注释在 return 语句上强制执行类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66487233/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com