Php 在null上对成员函数的Laravel调用

Php 在null上对成员函数的Laravel调用,php,laravel,nul,Php,Laravel,Nul,在过去的一个小时里,我一直在谷歌上搜索和阅读有关这个问题的帖子,但一直无法解决这个问题。我附加了一个try-catch和一个if语句,但我仍然得到对null错误上的成员函数的调用。这是我的密码 try{ $user = Auth::user(); if(null !== ($user->wasStripePlan())){ $data['allSubscriptions'] = (Auth::user()-&

在过去的一个小时里,我一直在谷歌上搜索和阅读有关这个问题的帖子,但一直无法解决这个问题。我附加了一个try-catch和一个if语句,但我仍然得到对null错误上的成员函数的调用。这是我的密码

 try{
            $user = Auth::user();
            if(null !== ($user->wasStripePlan())){
                $data['allSubscriptions'] = (Auth::user()->wasStripePlan()) ? Auth::user()->subscriptions : [];
            }
        }catch (\PDOException $e){
            $data['allSubscriptions'] = false;
        }

关于解决方案有什么想法吗?

我认为您正在尝试在不登录的情况下访问Auth::user。如果您未登录并且不需要使用try-and-catch块,它将返回null

这个错误是不言自明的

在null上调用成员函数

如果查看内部,try块成员函数调用在Auth::user之后处于if条件,由于一些原因(如您未登录),它可能返回null

if(null !== ($user->wasStripePlan()))

根据错误$user变量为null。尝试找出Auth::user返回null的原因

我认为您正在尝试在未登录的情况下访问Auth::user。如果您未登录并且不需要使用try-and-catch块,它将返回null

这个错误是不言自明的

在null上调用成员函数

如果查看内部,try块成员函数调用在Auth::user之后处于if条件,由于一些原因(如您未登录),它可能返回null

if(null !== ($user->wasStripePlan()))

根据错误$user变量为null。尝试找出Auth::user返回null的原因

我想你对这件事考虑得太多了。当简单的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,因此您将捕获出现的第一个类型

我想你对这件事考虑得太多了。当简单的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,因此您将捕获出现的第一个类型

我以为数据库调用出错时会抛出异常。您是否尝试捕获父类的异常?我认为您没有收到PDOException,因此它会一直在try块中移动。我认为PDOException是在数据库调用出错时抛出的。您是否尝试捕获父类的异常?我认为你没有得到一个PDO异常,所以它一直在尝试块中移动。