2012-01-15 7 views
2

私はPHPプロセッサで奇妙なエッジケースのように思えます。 PHPのマニュアルによると、エスケープされていないドル記号でもエラーはスローされません。 PHP処理のエッジケース?

PHPの変数は、変数の名前 の後にドル記号で表されます。変数名では、大文字と小文字が区別されます。

変数名は、PHPの他のラベルと同じ規則に従います。有効な 変数名は、文字またはアンダースコアで始まり、その後に 文字、数字またはアンダースコアが続きます。

私が見てきたエッジの場合は、次のような、すぐにドル記号後の文字は、文字またはアンダースコア(または特別な意味を呼び出しますいくつかの他のメタ文字の組み合わせない場合であります2番目のドル記号)。ここでは例です:

$someVariable = "This is a $(test of our edge case)."; 

I出力できecho文を使用して、この変数、およびテストは問題なく現れる単語の前にドル記号(逃げ場が必要ではなかったです)。私が知る限り、PHPはエラーや警告をスローしません。だから今私の質問に:これは、プロセッサの文法のエッジケースですか?バグですか?それとも私に見逃している他の解釈がありますか?

良いプログラミングの慣習として、ドル記号を二重引用符で囲んで文字を印刷する必要がある場合や、一重引用符で囲んだ文字列を使用する場合は、常にその文字をエスケープする必要があります。私はこの事件が必ずしもドル記号の前に脱出する必要がないのはなぜか不思議だった。

答えて

3

いいえ、エラーメッセージはありません。 PHPは二重引用符で囲まれた文字列内の有効な変数のみを展開します。

あなたが正規表現に精通している場合、PHPは、以下の式で、二重引用符で囲まれた文字列の内容を照合されると、あなたはそれについて考えることができます。だから私は、二重引用符で囲まれた中にドル記号をエスケープ推測

\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* 
+0

文字列は必ずしも**必ずしも**必須ではありません。正しい(それがベストプラクティスであっても、やり続ける何か)でしょうか? –

+0

@JonahBishop:これは正しいことです。これを続けることは、一貫性のためには良いことです。 –