Laravel在null上调用成员函数

时间:2019-01-18 19:46:15

标签: php laravel nul

我花了最后一个小时谷歌搜索和阅读有关此问题的文章,但无法解决此问题。我附加了一个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;
        }

对解决方案有何想法?

2 个答案:

答案 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,因此您将捕获出现的第一个类型。