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

2 に答える 2

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がない場合に null または空の値として定義されている場合は$_GET['tag']、次の 3 項を使用できます。

// 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 に答える