php:define的用法

php:define的用法,php,Php,在Yii中,他们使用以下代码: defined('YII_DEBUG') or define('YII_DEBUG',true); 我以前从未见过有人这样写过。这是真实的php代码还是yii的某些语法?基本上,如果定义了(“yii\u调试”)的计算结果为false,它将定义它。有点像: mysql\u connect()或die(“die!!!!!!!”) 这是实际的PHP语法,只是不常用。它允许您不必编写: if(!defined("YII_DEBUG")) { define("Y

在Yii中,他们使用以下代码:

 defined('YII_DEBUG') or define('YII_DEBUG',true);
我以前从未见过有人这样写过。这是真实的php代码还是yii的某些语法?

基本上,如果定义了
(“yii\u调试”)
的计算结果为false,它将定义它。有点像:

mysql\u connect()或die(“die!!!!!!!”)

这是实际的PHP语法,只是不常用。它允许您不必编写:

if(!defined("YII_DEBUG"))
{
    define("YII_DEBUG", true);
}
甚至更短

if(!defined("YII_DEBUG"))
    define("YII_DEBUG", true);
我猜他们用它来完全摆脱if语句。没有括号的第二个if语句会对编辑造成危害,而第一个if语句可能会占用开发人员太多的空间

就我个人而言,我会清楚这一点,因为这不是一个众所周知的功能。通过使用常见的语法(if语句),其他程序员不必怀疑它的功能


(虽然,现在我可能会看一下。看起来很简单,去掉了不必要的if子句)

这是因为短路评估

如果
defined('YII_DEBUG')
返回
false
,它将尝试计算第二个表达式以使句子为真,将
YII_DEBUG
常量定义为
true


最后的结果是,如果未定义该常数,则将其定义为
true
。如果已经定义了它(值无关紧要),那么什么也不做(因为第一个表达式为true,第二个表达式不需要求值,表达式才为true)。

非常简单-or运算符非常有效,因为它只会在需要时求值语句的第二部分。因此,如果第一部分的计算结果为true(常量已定义),则不会执行define()调用。

这看起来像是一段干净的代码。我可以看到我自己在将来的某个地方使用这种语法。我也看到了defined(CONSTANT)?null:定义('CONSTANT',true);那也很干净