PHP 7.2 中 count 更加严格了
先贴代码
在PHP7.2中,如果参数不是数组,或者没有实现 Countable 接口,就会报错了。
在这个rfc中有提到,https://wiki.php.net/rfc/counting_non_coun...
所以用到 count 的地方,需要注意一下了
比如下面这段代码
$user = User::find(1);
if (count($user)) {
do something
}
其实可以这样,
$user = User::find(1);
if ($user) {
do something
}
本帖已被设为精华帖!
本帖由 Summer
于 7年前 加精
Laravel framework 老版本也有这个问题,数据库部分。如果线上有 L5.3 或更早的项目,千万别升级 PHP 7.2
可以用 collection 的 isNotEmpty() 方法代替
@young 然而User::find返回的并不是
Collection
。楼主用count来判断单个Eloquent也是奇怪的写法。。。
@young @nff93 你们不要纠结例子,我只是看到了类似代码,说明一下而已
我都這樣
if ($user = User::find($id)) {
}
真的假的空也成立
印象中沒有
我再試試
eloquent find 如果没找到会返回null 所以可以
$user = User::all(); 或者 $user = User::where($params)->get(); 返回的是 Collection 对象,当然不能用 if 判断对象了
collection是实现了Countable的。
@bayue 是的
前几天在电脑上部署环境,用的是
homestead
的最新版本,laravel 5.3
很迷的报错了,百度了一下才知道这个问题用find不好,一般用findOrFaill, 不过这样也不好。报错都不好处理
@xuanjiang1985 不是find不好,是有的场景中是由前端来决定显示内容和方式,此时是不能用findOrFail的。
可以这样
@bayue 很好奇是什么字体,蛮好看的
@Seaony https://github.com/mozilla/Fira
@bayue thx
5.5以前版本的
Builder
scope部分就会出现这个问题,5.5的这个部分用count((array) $this->wheres)
类型转换了