我遇到了一个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,则不需要检查右操作数。
我记得在某个地方读到过这篇文章。让我看看我是否能找到链接。