2011-03-09 9 views
5

私は、PHPで<<<HTMLを使用するときに定義された変数を使用する方法を理解しようとしています。 これは私が達成したいものの一例である:定義された変数へのアクセス<<< HTML in php

<?php 
define('TEST','This is a test'); 
echo <<<HTML 
Defined: {TEST} 
HTML; 
?> 

<<<HTML内で定義された「TEST」を得るための適切な方法は何ですか?

編集:
どの方法が最も速いのかを調べるために小さなテストを行いました。 私のテストでは、ヘレドック内で20の変数を使用しました。さまざまな方法で何が起こったのか(秒単位):
Accessing defined variable inside <<<HTML in phpこれを実行するのに最も遅い方法です - 0.00216103。
Accessing defined variable inside <<<HTML in phpは、より高速です - 0.00073290
Accessing defined variable inside <<<HTML in phpはさらに高速です - 0.00052595です。
Accessing defined variable inside <<<HTML in phpは、最も高速です - 0.00011110です。

希望、これは他の誰かに役立ちます:)

答えて

10

それは、これまでのところ、私は、少なくとも承知しているとして、ありません

define('TEST','This is a test'); 

var $defined = TEST; 

echo <<<HTML 
Defined: {$defined} 
HTML; 

A私は怖いきれいではないですが、...そのコンテキストで定義された値を直接使用するには、変数を使用する必要があります。

+0

私もそうです。別の方法があるのであれば私はちょうど興味があった。 – tftd

+2

は投票権を得ます - 純粋にその権利のためです。 heredoc構文は変数のみを評価することができます。変数に定数を代入して文字列に挿入する必要があります。たぶん、別の文字列構築技術を見てみましょうか? –

+0

私は定義の代わりに通常の変数を使用します。私は物事がphpで良く評価されているのかどうか疑問に思っていましたが、明らかに私は変数を長い時間使用する必要があります:) – tftd

3

できません。その値を実際の変数に代入する。

5

は、ここで私はPHPマニュアルにノートに記載されています方法:http://www.php.net/manual/en/function.define.php#100449

それは少し複雑だが、それが動作するはずです。

<?php 
define('TEST','This is a test'); 

$cst = 'cst'; 
function cst($constant){ 
    return $constant; 
} 

echo <<<HTML 
Defined: {$cst(TEST)} 
HTML; 

あなたが含まれるように、複数の定義された定数を持っている場合は、これを手動で定数の値に変数の多くを割り当てるよりも良いだろう。

+0

うわー...このコードは岩です!このようにheredocの中で関数を使うことは決して考えられませんでした!共有ありがとう! – tftd

+0

私が言ったように、それは一種の複雑です。クレジットは、PHPマニュアル上でコード作成者に渡さなければなりません。深刻な専門家の宝石がいくつかあります。 –

+0

これは私に評価されています。 ^^ –

4

あなたは、定数へのアクセサのような役割を果たしたクラスを作成することができます。

$defines = new DefineAccessor; 

そして、のような、それを使用します。

class DefineAccessor { 
    function __get($name) { 
     if (defined($name)) 
      return eval('return ' . $name . ';'); 
    } 
} 

がヒアドキュメントでそれを使用できるようにするには、そのインスタンスを作成します。これは:

echo <<<HTML 
Defined: $defines->TEST 
HTML; 
+0

これはきれいで再利用可能な解決策ですが、それは必要だと思います。 –

関連する問題