Laravel 在 null 上调用成员函数
Laravel call to member function on null
我花了最后一个小时谷歌搜索和阅读关于这个问题的堆栈帖子,但一直无法解决这个问题。我附加了一个 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;
}
有什么解决方案吗?
我认为您试图在未登录的情况下访问 Auth::user()。如果您未登录并且无需使用 try 和 return null,它将变为 null捕获块。
错误不言自明。
Call to member function on null
如果你在 try 块中查看成员函数调用在 Auth::user() 之后的 if 条件中,它可以 return null 因为一些原因,比如你没有登录。
if(null !== ($user->wasStripePlan()))
根据错误 $user 变量为空。试着弄清楚为什么 Auth::user() 是 returning 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 块上使用基本异常 class。因为除非异常类型匹配,否则它不会解决捕获问题。由于所有类型都继承自 Exception,因此您会看到第一个出现的类型。
我花了最后一个小时谷歌搜索和阅读关于这个问题的堆栈帖子,但一直无法解决这个问题。我附加了一个 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;
}
有什么解决方案吗?
我认为您试图在未登录的情况下访问 Auth::user()。如果您未登录并且无需使用 try 和 return null,它将变为 null捕获块。
错误不言自明。
Call to member function on null
如果你在 try 块中查看成员函数调用在 Auth::user() 之后的 if 条件中,它可以 return null 因为一些原因,比如你没有登录。
if(null !== ($user->wasStripePlan()))
根据错误 $user 变量为空。试着弄清楚为什么 Auth::user() 是 returning 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 块上使用基本异常 class。因为除非异常类型匹配,否则它不会解决捕获问题。由于所有类型都继承自 Exception,因此您会看到第一个出现的类型。