是",;及;关键字与PHP中的if(TRUE)相同
在Laravel5的一个模型类中,我遇到了下面的代码,我不确定这是什么意思是",;及;关键字与PHP中的if(TRUE)相同,php,laravel,laravel-5,Php,Laravel,Laravel 5,在Laravel5的一个模型类中,我遇到了下面的代码,我不确定这是什么意思 $query = User::query(); \Request::input('name') and $query->where('name', 'like', '%' . \Request::input('name') . '%'); \Request::input('email') and $query->where('email', 'like', '%' . \Request::input('em
$query = User::query();
\Request::input('name') and $query->where('name', 'like', '%' . \Request::input('name') . '%');
\Request::input('email') and $query->where('email', 'like', '%' . \Request::input('email') . '%');
return $query->paginate(15);
它与下面的代码相同吗
if (\Request::input('name')) {
$query->where('name', 'like', '%' . \Request::input('name') . '%');
}
if (\Request::input('email')) {
$query->where('email', 'like', '%' . \Request::input('email') . '%');
}
是的。PHP&&
和和
运算符在大多数情况下是相同的(除了优先级,我们可以在这里忽略它)。所有布尔运算符都用于短路评估;i、 e.0和1
永远不可能是true
,因为0
是假的,所以PHP甚至不需要计算第二个操作数1
。几乎所有语言都这样做
在这里,如果,则将其用作速记。如果\Request::input('name')
为truthy,则将计算第二个操作数$query->…
,否则将跳过它
这在风格上是有问题的,几乎没有得到认可,尤其是因为它引发了这样的问题。您应该只编写一个传统的,如果
,它更容易理解,并且不缺少需要保留的行。“它与下面的代码相同吗?”是的,后者更具可读性。前者使用的是短路评估是…………第一个例子的风格很差,不应该使用。@Phil这个问题不是链接问题的真正副本,因为它更属于if
语句。我知道你的意思,但这对新手来说很困惑…教程中有很多在线代码,比如mysqli\u connect。。。或者die()
原理是一样的或
和和
基本上与|
和&&
相同,只是优先级不同(在您的示例中,这甚至不起作用)