如何判断一个对象是否为空?

例如:

$user = User::find(1);
if ($user) {
    ...
} else {
    ...
}

直接使用 if 可以达到目的 但是否有更好的写法呢? 感谢

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

User::find(1) 返回的是模型实例,而不是模型集合。所以如果数据库中没有查到的话本身就是null
可以直接用if进行判断

$user = User::find(1);
if ($user) {
    //有值
} else {
    //为空
}
4年前 评论
讨论数量: 10

count

empty () 和 集合的 ->count (), ->isEmpty () 方法
你也许在项目中使用过 empty() 和 集合的 count()、`isEmpty () 方法来判断数据模型是否存在,也许你没有错,不过,建议使用 count 来判断,原因如下:

empty () 对于空集合对象的话,还是会返回 true;
->count () 属于集合专属的方法,无法对 Model 使用,只能在多个对应关系下使用;
->isEmpty () 同上;
PHP 内置的 count 函数对以上所有情况都通杀,不论是单一、多个对应关系,不论是数组、集合,还是 Eloquent 数据模型。

Summer

4年前 评论
Epona

如果是$user不存在抛出异常的话,可以用findOrFail()否则,就用ifelse吧。

4年前 评论

最简单的方法 ->toArray() 然后判断

4年前 评论

if (!$model) 没有什么不好的,就像你写go的时候
if (model != nil) 和 _, err := doFunc() 一样
就像写java if (model != null) 一样,如果语言或框架没有支持对null的对象操作,就接受这个现实

像楼上说的count也可以,我不喜欢用是因为原则上不应该对一个Model|null的数据去count,直接可以判空来解决问题,这就见仁见智了

4年前 评论

补充下,你觉得难看可能是因为else,不是因为if
一般情况下我们会
if (!$model) {
// throw or return
}

// do something

4年前 评论

除了 findOrFail、if else 只会这些了

$user ?? other;

$user && do;

$user ? do1 : do2;
4年前 评论

楼上说的对 if没什么不好的 只不过if中习惯抛出异常直接结束掉后面的

4年前 评论

感谢各位的解答 :kissing_heart:

4年前 评论

楼主提问应该是对于严谨性的问题。
比如if应该是作为布尔判断,而不是对象。

1. 
if (! is_null($user)) {

}

2. 
if ($user instanceof User) {

}
4年前 评论
Kamicloud 4年前

User::find(1) 返回的是模型实例,而不是模型集合。所以如果数据库中没有查到的话本身就是null
可以直接用if进行判断

$user = User::find(1);
if ($user) {
    //有值
} else {
    //为空
}
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!