php 闭包传参_thinkPHP5框架闭包函数与子查询传参用法示例

本文实例讲述了thinkPHP5框架闭包函数用法。分享给大家供大家参考,具体如下:

普通使用

举个栗子:

$this->where(function ($query)

{

$query->where('id', 1)->whereor('id', 2);

})->find();

上述栗子就是一个简单的where查询的闭包函数使用,使用匿名函数添加复杂条件查询,

最后执行的sql是:

// 加入上述代码写在user模型里,则执行的sql为:

select * from user where (id = 1 or id = 2);

复杂用法

其实闭包函数也不会复杂到哪去,无非带参数不带参数而已。举个栗子(上面的栗子加强下)

$this->where(function ($query) use ($id1, $id2)

{

$query->where('id', $id1)->whereor('id', $id2);

})->find();

这也就是thinkphp 5 里怎么使用闭包查询传参数的方法,使用use 传入参数。

tp5闭包子查询传参方法

在channel表中查询status,channel_id,channel_name,account_level这些字段,且这些字段的channel_id不在adv_id为$id的表adv_channel_rule中:

$model = new Model();

$id = $req_models["id"];

tp5闭包子查询传参:

$res = $model->table('channel')

->field(['status','channel_id','channel_name','account_level'])

->where('channel_id','NOT IN',function($query) use ($id) {

$query->table('adv_channel_rule')->where("adv_id",$id)->field('channel_id');

})->select();

mysql的原生写法:

$res = 'SELECT adv_id,adv_name,status,account_level FROM `channel` WHERE channel_id NOT IN (SELECT channel_id FROM adv_channel_rule WHERE adv_id='.$id.')';

$result = $model->query($res);

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
闭包函数可以通过外部函数参数来传递参数。在闭包函数内部,可以使用外部函数参数作为闭包函数的局部变量。这样,在每次调用闭包函数时,就不需要再次传递参数了。例如,可以定义一个外部函数outer,接受参数username,然后在outer函数内部定义一个闭包函数index,该闭包函数可以使用外部函数参数username作为局部变量。这样,在调用闭包函数时,就可以直接使用外部函数传递的参数值。示例代码如下: ``` def outer(username): def index(): print(username) return index res = outer('kevin') res() # 输出kevin res1 = outer('jason') res1() # 输出jason ``` 在这个例子中,outer函数接受一个参数username,并在内部定义了闭包函数index。闭包函数index可以使用外部函数outer的参数username作为局部变量。当调用outer函数时,会返回闭包函数index。然后,可以通过调用返回的闭包函数来执行闭包函数函数体代码,并且每次调用都会使用外部函数传递的参数值。 #### 引用[.reference_title] - *1* *2* [【python闭包函数与装饰器】](https://blog.csdn.net/Ban_a/article/details/123581987)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python之闭包函数](https://blog.csdn.net/qq_16694047/article/details/129013247)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值