我花了最后一个小时谷歌搜索和阅读有关此问题的文章,但无法解决此问题。我附加了一个try catch和一个if语句,但是我仍然得到call to member function on null error
。这是我的代码
try{
$user = Auth::user();
if(null !== ($user->wasStripePlan())){
$data['allSubscriptions'] = (Auth::user()->wasStripePlan()) ? Auth::user()->subscriptions : [];
}
}catch (\PDOException $e){
$data['allSubscriptions'] = false;
}
对解决方案有何想法?
答案 0 :(得分:3)
我认为您正在尝试不登录而访问Auth :: user()。如果您未登录并且不需要使用try and catch块,它将返回null。
该错误是不言自明的。
在null上调用成员函数
如果您查看内部的try块成员函数调用,则在Auth :: user()之后的if条件中,由于某些原因(例如您尚未登录),该函数可能返回null。
if(null !== ($user->wasStripePlan()))
根据错误 $ user 变量为空。尝试找出为什么 Auth :: user()返回空值的原因。
答案 1 :(得分:1)
我认为您过分考虑了这一点。简单的if / else语句可以处理时,无需执行try / catch。
if(isset(Auth::user()){
$data['allSubscriptions'] = $data['allSubscriptions'] = (Auth::user()->wasStripePlan()) ? Auth::user()->subscriptions : [];
}else{
$data['allSbuscriptions'] = false;
}
由于您检查用户是否使用isset登录,因此不会引发任何错误,也无需尝试捕获一个错误。另外,除非您知道会引发哪种错误,否则我只会在catch块上使用基类Exception。因为除非Exception类型匹配,否则它将无法解决捕获问题。由于所有类型都继承自Exception,因此您将捕获出现的第一个类型。