【问题标题】:Laravel call to member function on nullLaravel 在 null 上调用成员函数
【发布时间】:2019-01-18 19:46:15
【问题描述】:

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

关于解决方案的任何想法?

【问题讨论】:

  • 我认为当数据库调用出现问题时会抛出 PDOExceptions。您是否尝试过捕获 \Exception (父类)?我认为您没有收到 PDOException,因此它一直在 try 块中移动。

标签: php laravel nul


【解决方案1】:

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

错误是不言自明的。

在 null 上调用成员函数

如果你查看try块成员函数调用是在Auth::user()之后的if条件中,由于你没有登录等一些原因,它可能会返回null。

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

根据错误 $user 变量为空。尝试找出为什么 Auth::user() 返回 null。

【讨论】:

    【解决方案2】:

    我想你想多了。当简单的 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,因此您将捕捉到出现的第一个类型。

    【讨论】:

      猜你喜欢
      • 2016-09-04
      • 2016-06-29
      • 2018-04-03
      • 2021-10-06
      • 2019-06-17
      • 2020-10-22
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多