2

私は常に、すべての php 関数は[a-zA-Z].

たとえば、これはうまくいきます:

function a1() {
  return "Something, because I'm written properly.";
}

...これはそうではありませんが:

function 1a() {
  return "Nothing, because you'll encounter an error before this function ever runs.";
}

ただし、 の結果として表示される文字は、rawurldecode('%E2%80%A9')それを表示するドキュメントで UTF8 のコンテンツ タイプが宣言されている場合、関数の定義にも使用できます。

隠し文字を表示しないテキスト エディターでは、最終的に関数が定義されているように見え、それfunction () {を呼び出して実行できます (これ以上のものはないように見えます)。();

ソースコードを貼り付けることができず、まだ正しく表示されていないため、スクリーンショットをいくつか示します。1 つ目はブラウザに表示されたもののスクリーンショットで、2 つ目はテキスト エディタ (TextWrangler) 内に表示された実際のソース コードのスクリーンショットで、[隠し文字の表示]がオンになっています。

ブラウザ:


ここに画像の説明を入力


ソースコード:


ここに画像の説明を入力

私の質問: これは意図的なものですか? 非印刷文字を使用して関数/変数を定義し、それでも問題なく動作させることができる必要がありますか? もしそうなら、それはどこかに文書化されていますか?

私はそれについての情報を見つけることができませんでしたが、私は(明らかに)すべてを知っているわけではありません.

ありがとう!

4

1 に答える 1

2

マニュアルから:

関数名は、PHP の他のラベルと同じ規則に従います。有効な関数名は、文字またはアンダースコアで始まり、任意の数の文字、数字、またはアンダースコアが続きます。正規表現としては、[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* のように表現されます。

リンクされた他の回答で説明されているように、正規表現はバイト単位で適用され、「多くの奇妙な Unicode 名」が許可されます。

そのようにすると、あなたが見たようないくつかの副作用があります。しかし、それが PHP の背後にいる人々の本来の意図であったとは想像できません。それは、彼らが PHP を実装した方法の直接的な結果にすぎません。

于 2013-11-01T07:08:09.367 に答える