使用AND作为条件


Using AND as a conditional

我遇到了一个wordpress主题,它使用了以下代码:

is_file and include 'file.php';

我以前从未见过这种情况,所以我很困惑。它在我正在研究的特定wordpress主题中工作得很好。但如果我只使用这行代码并单独运行它,它包括文件,但也会给我以下通知:

Notice: Use of undefined constant is_file - assumed 'is_file' in (the file path) on line 3

但如果我这样做:

is_file('file.php') and include 'file.php';

它运行良好。

问题1:为什么这样做?在哪里可以阅读更多关于使用"answers"作为条件的信息?

问题2:这是糟糕的编码实践吗?速度慢吗?有风险吗?等等

问题3:为什么它在wordpress主题中起作用,而不是单独起作用?(是的,我使用相同的PHP设置)。

在这种情况下,and的意思是"如果语句为true,则执行此操作"。所以Wordpress中的代码是不正确的:

is_file and include 'file.php'

因为常量应该是大写的。在这种情况下,即使它们的意思是常数,也没有意义。

is_file('my_file') and include 'my_file.php'

是正确的方式。

同样,您可以使用or:"如果语句为false,则执行此操作",如

$payed or my_redirect_function('pay.php'); //go to payment page
is_file('file.php') and include 'file.php'; 

它工作是因为is_file('file.php')返回TRUE

is_file and include 'file.php'; 

它不起作用,因为CCD_ 5什么都不返回。

AND指令可以像函数一样处理

function and($a, $b)
{
    if($a) return $b;
    else return $a;
}

只有一个例外。当您将表达式作为第二个参数传递时,甚至不会在$a为false时执行。这是内置的语言优化,它保证以这种方式运行。通过这种方式,您可以编写一个表达式链,该表达式链将仅在前面的每个表达式都为false时执行。它是非常经常使用的特性,不仅在PHP中,它还被认为是不好的做法。

同样的事情是关于$a或$b:

function or($a, $b)
{
    if($a) return $a;
    else return $b;
}

遗憾的是,我对wordpress了解不多。

and首先检查左操作数,如果为false,则不需要检查右操作数。

我记得在某个地方读到过这篇文章。让我看看我是否能找到链接。