任何人都知道以下代码段的简短if版本?

时间:2012-11-16 17:02:00

标签: php if-statement

if(isset($_GET['tag'])) { 
  define("NJ_THISCATSUB","tag: ".$_GET['tag']);
}

2 个答案:

答案 0 :(得分:3)

可能有几种方式,没有一种方法可以推荐而不是你拥有的方式。

如果忽略{},如果NJ_THISCATSUB被假定为 未定义,则无法将其打包成三元运算符(例如) 。坚持你所拥有的 - 清晰,可读,正确。

$_GET['tag']

三元例子:

但是,// About as short as you're going to get: // In other words, your method is fine and I don't recommend changing it. if(isset($_GET['tag'])) define("NJ_THISCATSUB","tag: ".$_GET['tag']); 在没有NJ_THISCATSUB的情况下被定义为空值或空值,您可以使用三元组:

$_GET['tag']

这似乎不是您所追求的行为。


短路// Define as NULL, absent $_GET['tag'] (not the same as what you have!) define('NJ_THISCATSUB', isset($_GET['tag']) ? "tag: ".$_GET['tag'] : NULL);

您可以利用逻辑&&并以此方式保存几个字符。如果&&的左侧为真,则会继续检查右侧,并且必须评估&&才能执行此操作。如果左侧是define(),它将短路而不评估右侧。因此,这有效:

FALSE

以上在PHP中是非常规的(如果在PHP中存在诸如惯例之类的东西),并且在JavaScript或Ruby等语言中更像是在家里。使用您最初发布的更简单的isset($_GET['tag']) && define("NJ_THISCATSUB","tag: ".$_GET['tag']); ,您更有可能遇到PHP代码。

if ()

答案 1 :(得分:1)

如果你可以允许半满的常数:

define("NJ_THISCATSUB", @"tag: $_GET[tag]");

请注意,这只有在以后可能要调试缺少的输入参数时才有意义。随着isset它永远消失,@()你可以带回通知。

另请注意,缺少数组键引号只能在双引号字符串上下文中使用。