Laravel中User $user的作用是什么?是否等同于new User()?
关于PHP中
User $user的作用及代码解析 1. User $user是什么?和$user = new User()一样吗?
完全不一样哦!User $user是PHP的类型提示(Type Hinting),它的作用是声明某个变量/参数必须是User类的实例,而不是用来创建实例的。
$user = new User():这才是真正创建User类的一个新实例,把这个实例赋值给变量$user。User $user:如果写在函数/方法的参数里(比如你第二个代码片段的写法),它是在告诉PHP:“这个$user参数必须是User类的对象,不然就报错”;如果是在类的属性里写,是声明这个属性的类型为User实例(PHP 7.4+支持属性类型声明)。
举个实际例子:
public function show(User $user) { echo $user->name; }
当你调用show($someNonUserObject)时,PHP会直接抛出错误,因为传入的不是User实例,这能帮你提前避免类型不匹配的问题。
2. 解析你的settings方法代码
来看这段代码:
public function settings(User $user){ $user = Auth::user(); return view('settings', compact('user')); }
这里有个明显的小问题:你在方法参数里用了User $user类型提示,但紧接着就把$user重新赋值为Auth::user()(当前登录用户的实例),这就导致参数里的$user完全被覆盖了,没有起到任何实际作用。
甚至会造成不必要的困扰:别人调用这个方法时,必须传入一个User实例,但传入之后立刻被替换成登录用户,这完全没必要。
优化建议:
- 如果你就是想获取当前登录用户,直接去掉参数里的
User $user就行:public function settings(){ $user = Auth::user(); return view('settings', compact('user')); } - 如果你本来是想通过依赖注入获取指定用户,那就不要重新赋值
$user,直接使用传入的实例即可。
内容的提问来源于stack exchange,提问作者Onyx
相关产品推荐
相关产品推荐

