站长图库向大家介绍了Thinkphp5分页函数,paginate中的each()传参等相关知识,希望对您有所帮助
这篇教程来学习Thinkphp5分页函数paginate中的each()传入自定义参数的方法,如果在each函数中想要调用外面的函数或者变量怎么办?
如果在each()函数内调用外部变量,会发现直接报变量不存在的错误
->paginate($rows,false,['query'=>$where])->each(function($item){ dump($tmp); // 外部参数 $item['typename'] = .....; })这时会报错,如下:

然后我觉得是变量作用域问题,于是在each()里加了个global声明
->paginate($rows,false,['query'=>$where])->each(function($item){ global $tmp; dump($tmp); $item['typename'] = .....; })虽然不报变量不存在了,但是打印出来的值是null,还是没有调用到外面的变量

最后,在each()函数后调用一个use函数,即可传参成功
->paginate($rows,false,['query'=>$where])->each(function($item) use($tmp)/*添加的参数*/{ dump($tmp); $item['typename'] = .....; })
如果在函数中需要修改变量的值,会发现在函数内,变量的值改变了,但是函数外面的变量值还是没变
->paginate($rows,false,['query'=>$where])->each(function($item) use($tmp){ $tmp = $tmp + 1; dump($tmp. '"tmp1"'); $item['typename'] = .....; })
这就是函数内外的变量作用域问题了,加一个&符即可解决
->paginate($rows,false,['query'=>$where])->each(function($item) use(&$tmp){ $tmp = $tmp + 1; dump($tmp. '"tmp1"'); $item['typename'] = ....; })
总结
就是在 each(function($item){})中加入 use(&$tmp) 即可,如:
each(function($item) use(&$tmp){})你学会了吗?

