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

2 回答 2

3

可能有几种方法,其中没有一种是真正推荐的,而不是你所拥有的。

除了省略if假设未定义when未设置时,{}您无法通过将其打包到三元运算符(例如)中来真正缩短。坚持你所拥有的——它清晰易读、正确。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在没有 的情况下被定义为 null 或空值$_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,它将短路而不评估右侧。因此这有效:

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

不过,上述内容在 PHP 中有点不合常规(如果 PHP 中有约定),并且在 JavaScript 或 Ruby 等语言中更适用。if ()使用最初发布的更简单的代码,您更有可能遇到 PHP 代码。

// Simple console demonstration
// Define X if $x is set:
php > $x = 123;
php > isset($x) && define('X', $x);
php > echo X;
// 123

// Define Y if $y is set (it isn't)...
php > isset($y) && define('Y', $y);
php > echo Y;
PHP Notice:  Use of undefined constant Y - assumed 'Y' in php shell code on line 1

Notice: Use of undefined constant Y - assumed 'Y' in php shell code on line 1
// Oops, Y is not defined as a constant...
于 2012-11-16T17:04:31.810 回答
1

如果您可以允许半填充常量:

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

请注意,这仅在以后可能要调试缺少的输入参数时才有意义。随着isset它一去不复返,@()您可以带回通知。

另请注意,仅在双引号字符串上下文中才允许缺少数组键引号。

于 2012-11-16T17:09:05.327 回答