9

以下が期待通りに動かないのを見てびっくりしました。

define('CONST_TEST','Some string');
echo "What is the value of {CONST_TEST} going to be?";

出力:{CONST_TEST}の値はどうなりますか?

中括弧内の定数を解決する方法はありますか?

はい、私は私がただできることを知っています

echo "What is the value of ".CONST_TEST." going to be?";

しかし、パフォーマンスのためではなく、読みやすさのために、文字列を連結したくないのです。

4

4 に答える 4

7

いいえ、それは不可能です。phpは一重引用符/二重引用符内のCONST_TEST単なる文字列と見なされるためです。そのためには連結を使用する必要があります。

echo "What is the value of ".CONST_TEST." going to be?";
于 2010-09-04T12:07:54.837 に答える
2

なぜあなたがそれから大騒ぎをしなければならないのか分かりませんが、あなたはいつでもすることができます:

define('CONST_TEST','Some string');
$def=CONST_TEST;
echo "What is the value of $def going to be?";
于 2010-09-04T12:12:48.943 に答える
2

不可能かもしれませんが、あなたの目標は読みやすさであるため、sprintf / printfを使用して、文字列の連結よりも読みやすさを向上させることができます。

define('CONST_TEST','Some string');
printf("What is the value of %s going to be?", CONST_TEST);
于 2011-04-16T00:16:56.020 に答える
1

その機能が本当にひどく必要な場合は、すべての定数とその値を見つけるリフレクションを使用して小さなコードを書くことができます。次に、これらをこのように変数内に設定します$CONSTANTS['CONSTANT_NAME']...。これは、文字列に定数を入れたい場合は、{}を使用できることを意味します。また、それらをに追加するのではなく、$CONSTANTSarrayaccessを実装するクラスにして、その中の値を変更できないようにします(配列としてアクセスできるオブジェクトに追加された新しい要素のみ)。

したがって、それを使用すると、次のようになります。

$CONSTANTS = new constant_collection();

//this bit would normally be automatically populate using reflection to find all the constants... but just for demo purposes, here is what would and wouldn't be allowed.
$CONSTANTS['PI'] = 3.14;
$CONSTANTS['PI'] = 4.34; //triggers an error
unset($CONSTANTS['PI']); //triggers an error
foreach ($CONSTANTS as $name=>$value) {
    .... only if the correct interface methods are implemented to allow this
}
print count($CONSTANTS); //only if the countable interface is implemented to allow this

print "PI is {$CONSTANTS['PI']}"; //works fine :D

入力する余分な文字が数文字しかないようにするには、 ;)$Cの代わりに使用できます。$CONSTANTS

お役に立てば幸い、スコット

于 2012-10-24T16:51:31.813 に答える