2009-08-12 20 views
21

PHPで二重引用符で囲まれた静的変数を評価するにはどうすればよいですか?二重引用符で囲まれたPHP静的変数

は、私はこのような何かをしたい:

log("self::$CLASS $METHOD entering"); 

は私が自己:: $クラスの変数の値を取得するには、{}コンボのすべての種類を試してみたが、何も働いていません。私は現在、文字列の連結と和解しましたが、タイプする痛みです:

log(self::$CLASS . " $METHOD entering"); 
+6

ログ(自己:: $クラス "の$ METHOD入りを"); は、log( "self :: $ CLASS $ METHOD entered")の代わりに1つの余分な文字を入力します。 ..これは痛みですか? –

+1

それはそれほど悪くはありませんが、もう1つは読みやすくタイプするほうがはるかに簡単です。 :)あなたが最適化に関心がなければ、代替案があるかどうか疑問に思っていました。 – Chris

+4

@Scott:落胆は答えではありません – cmc

答えて

16

申し訳ありませんが、あなたはそれを行うことはできません。単純な式の場合にのみ機能します。 hereを参照してください。

+0

"{はエスケープできないので、この構文は$が{。 これを正しく理解すれば、$文字は左中括弧の直後になければならないため、 "{self :: $ METHOD}"は機能しません。 – Chris

3

私はあなたの質問への答えを知らないが、あなたが__METHOD__magic constantを使用して、クラス名とメソッドを表示することができます。

+0

感謝。これは役に立ちました。私はJavaから移行しており、魔法の定数を掘り下げる機会はありませんでした。クラスとメソッドの変数を定義する代わりに、これらを使用します。 – Chris

1

ジャスト連結と一緒に住んでいます。 You'd be surprised how inefficient variable interpolation in strings can be

そして、これは、最適化前またはマイクロ最適化の傘の下に落ちる可能性がありながら、私はちょうどあなたが実際にこの例では、任意の優雅さを得るとは思いません。

個人的に、私はつもりが1つまたは他の小さな最適化を行うことだし、私の選択肢は「速く」および「タイプしやすい」であれば - 私は「より速く」を選択つもりです。あなたはそれを数回だけタイプするので、おそらく何千回も実行するでしょう。

+4

落胆は答えではありません。 – cmc

+1

パーマリンクは何かのように見えます。 –

+2

文字列補間についての議論はまだ真実ではないかもしれません:Twitter経由のRasmus Lerdorfによると、これは1オペコード対tmp varのトレードオフであり、パフォーマンスは似ています。 – IMSoP

-1

はい、これは行うことができます。

log("{${self::$CLASS}} $METHOD entering"); 
+0

はい、許可されていますが、目的の効果が得られません。これは 'self :: $ CLASS'を変数名として扱います。 'self :: $ CLASS == 'foo''なら、あなたが期待しているように、' {foo} 'で終わって、' 'foo''で終わらないでしょう。 –

4

は、残念ながらまだこれを行うにはどのように方法はありません。 {${self::$CLASS}}self::$CLASSのコンテンツを返しませんが、self::$CLASSには名前の変数の内容を返しますので、ここでの回答の例は機能しません。ここで

はない戻っmyvar、しかしaaaない例です:

$myvar = 'aaa'; 
self::$CLASS = 'myvar'; 
echo "{${self::$CLASS}}"; 
関連する問題