代码之家  ›  专栏  ›  技术社区  ›  Aaron

对空成员函数的Laravel调用

  •  1
  • Aaron  · 技术社区  · 7 年前

    在过去的一个小时里,我一直在谷歌和阅读关于这个问题的文章,但一直无法解决这个问题。我附加了一个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 回复  |  直到 7 年前
        1
  •  1
  •   N Mahurin    7 年前

    我觉得你对这件事想得太多了。当简单的if/else语句可以处理时,不需要执行try/catch。

    if(isset(Auth::user()){
        $data['allSubscriptions'] = $data['allSubscriptions'] = (Auth::user()->wasStripePlan()) ? Auth::user()->subscriptions : [];
    }else{
        $data['allSbuscriptions'] = false;
    }
    

    因为您检查用户是否使用ISSET登录,所以不会引发错误,也不需要尝试捕获错误。另外,除非您知道将抛出什么类型的错误,否则我只使用catch块上的基本异常类。因为除非异常类型匹配,否则它不会解析catch。因为所有类型都继承自异常,所以您将捕获出现的第一个类型。

        2
  •  2
  •   Rafay Hassan    7 年前

    我认为您试图访问auth::user()而不登录。如果您没有登录并且不需要使用try-and-catch块,它将返回空值。

    这个错误是不言而喻的。

    对空成员函数的调用

    如果在try块成员函数中查找,则调用位于auth::user()之后的if条件中,由于一些原因(如未登录),该条件可能返回空值。

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

    根据错误 $用户 变量为空。试着找出原因 Auth::用户() 正在返回空值。