You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel模型PHP函数重构问题:为何改写后始终返回true?

问题原因与正确重构方式

问题原因

你重构后的代码存在运算符优先级错误。在PHP中,!!(双重逻辑非)的优先级高于==(相等比较),导致代码实际执行顺序是:

return (!! auth()->user()->id) == $id;

而非你预期的:

return !! (auth()->user()->id == $id);

当auth()->user()->id是有效值(非0、非null、非空字符串)时,!! auth()->user()->id会被转换为true。在PHP的松散比较规则下,true与任何非零的数值/字符串比较都会返回true,这就导致无论$id是否匹配,最终结果都为true。

正确重构方式

方式1:添加括号修正优先级

如果坚持使用!!来明确返回布尔值,只需给比较表达式加括号:

public function queOwner($id)
{
    return !! (auth()->user()->id == $id);
}

方式2:直接返回比较结果(推荐)

因为auth()->user()->id == $id本身就会返回布尔值,完全不需要额外的!!转换:

public function queOwner($id)
{
    return auth()->user()->id == $id;
}

方式3:处理未登录场景(更严谨)

考虑到用户未登录时auth()->user()会返回null,直接访问->id会触发错误,建议添加空值保护:

// Laravel 5.5+ 可用 optional 辅助函数
public function queOwner($id)
{
    return optional(auth()->user())->id == $id;
}

// Laravel 8+ 可用 nullsafe 运算符
public function queOwner($id)
{
    return auth()->user()?->id == $id;
}

内容的提问来源于stack exchange,提问作者Pouya Vaghefi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:11:08