php - 仅在一行中的条件下对对象调用 PHP 函数
问题描述
在 PHP 中我想在一个对象上调用一个函数:
$something->function1()->function2();
现在function2
应该只在变量$decision
为时调用true
。
所以像:
$something->function1();
if($decision)
$something->function2();
但我很好奇这是否可能仅在一行中实现。所以总的来说更漂亮。
语境:
在 PHP 原则中,我有一个 QueryBuilder 并且有一个where
子句,只有在变量$decision
为true
.
想法:选择一些东西,但当决定为真时,还要添加第二个 WHERE 部分。
[...]
->withQueryBuilder(
$this->getEntityManager()->createQueryBuilder()
->select('s')
->from(SomeEntity::class, 's')
->where('s.public = true')
->whereAnd('s.decision = true')
)
[...]
并且这里->whereAnd('e.decision = true')
应该只在$decision
is时执行true
。
这里的问题是,我不能简单地添加一个 if 语句,因为该函数withQueryBuilde()
只允许一个参数。
更新
我也尝试过这样的事情:
[...]
->withQueryBuilder(
function(){
return $this->getEntityManager()->createQueryBuilder()
->select('s')
->from(SomeEntity::class, 's')
->where('s.public = true')
->whereAnd('s.decision = true');
}
)
[...]
但Call to undefined method Closure::expr()
解决方案
好吧,我认为你想做的事情没有任何意义,但如果你真的想要,如果你可以向 QueryBuilder 添加一个什么都不做的函数,那么可能会有解决方案。那么你也能
$this->getEntityManager()->createQueryBuilder()
->select('s')
->from(SomeEntity::class, 's')
->where('s.public = true')
->{$decision ? 'whereAnd' : 'doNothing'}('s.decision = true');
您还可以修改参数,对查询没有影响
->whereAnd($decision ? 's.decision = true' : 'true=true' )
尽管如此,你还是应该简单地使用 normal if,除非你打赌你可以在一行中做到这一点。
推荐阅读
- mysql - 从 TIMESTAMPDIFF (time, Current_Time()) 中提取 hh:mm:ss
- java - mysql-binlog-connector-java - 在二进制日志索引文件中找不到第一个日志文件名
- java - IBM AppScan 的验证要求问题
- openssl - 根 CA 证书和中间 CA 证书
- docker - 使用 docker 和 docker-compose 构建的工作流程是什么?
- javascript - 在 webpack + react 中使用 sass-loader 出现多个错误
- java - Reactor 调度程序实施注意事项
- javascript - 将 HTML 对象添加到事件 javascript/meteor
- c# - 找不到方法 Microsoft.Owin.Security.Notifications.MessageReceivedNotification
- c++ - C++调用另一个子类的公共方法