【问题标题】:php defined constant in if/else shorthand [duplicate]php在if / else简写中定义了常量[重复]
【发布时间】:2013-05-08 20:21:13
【问题描述】:

我一直在学习 php 课程,其中一个练习让我们创建了一个 config.php 文件,我们在其中定义了数据库常量。

我知道这样做的标准方法是:

define("NAME", "value");

但是,这个练习的写法不同。它是 if/else 的简写形式。 现在我知道它是正确的,因为它有效。 但我不明白 为什么 它有效。 希望这对您更有经验的开发人员来说是一个简单的答案:

defined('DB_SERVER') ? null : define('DB_SERVER', 'localhost');

我读它的方式是检查是否定义了 DB_SERVER。 如果为真,则将其设置为 NULL ?

如果该常量的值已经定义,为什么它会将其设为 NULL?

【问题讨论】:

  • 尝试将其写成if/else 声明。
  • 这并不是使用三元运算符的真正预期方式。除非你觉得自己是摇滚明星什么的。在这种情况下使用if 来提高可读性。
  • 这真的不是一个很好的使用三元。如果我们想成为摇滚明星,我们应该写成defined('DB_SERVER') || define('DB_SERVER', 'localhost'); ;)
  • @DaggNabbit 或defined('DB_SERVER') or define('DB_SERVER', 'localhost');,以防您需要在您的条件下使用&&
  • @RobertK 将&&|| 与文本版本andor 混合是编写难以阅读的代码的好方法。你最好使用括号()

标签: php mysql


【解决方案1】:

如果它被定义,它将运行表达式null,它本质上是一个 noop(什么都不做)。否则,它实际上运行define。你现在可以把它写成defined('DB_SERVER') ?: define('DB_SERVER', 'localhost'),但我个人认为这很混乱。我会简单地把它写成:

if (!defined('DB_SERVER')) {
    define('DB_SERVER', 'localhost');
}

【讨论】:

  • 哇,我能说这有多棒吗?我的第一篇文章,不到 10 分钟就得到了回答和理解。我想我会喜欢 stackoverflow :) 谢谢大家!
【解决方案2】:

这里是长手形式:

if ( defined('DB_SERVER') )
{
    // Do nothing
}
else
{
    define('DB_SERVER', 'localhost');
}

英文:

如果有人已经定义了“DB_SERVER”,不要管它

否则,用'localhost'的值定义它

【讨论】:

  • 我认为您缺少一些括号...
  • @Vector: Few (adj.): 少数。 ;)
  • 一个更小的数字,现在。
  • 我的错,我总是将“少数”关联为 3+
猜你喜欢
  • 2017-01-14
  • 1970-01-01
  • 2013-01-05
  • 2013-11-19
  • 2016-12-25
  • 2016-07-10
  • 1970-01-01
  • 2019-01-03
  • 2014-08-08
相关资源
最近更新 更多