PHPでのGETリクエストの解析(自動解析のジョーク)

今日、私はPHPがGETメソッドで受け取ったパラメーターに対して$ _GET配列のキーをどのように定義するかを決定することにしました。 正直なところ、私はこのメカニズムの仕事にそのような非論理性が現れるとは思っていませんでした。 一般的に、なぜそれが起こったのかは明らかですが...





だから、練習する権利。 $ _GETでは、このような行が表示されるとどう思いますか: "?Aa [bb] [cc = 11"? 原則として、オプションはそれほど多くありませんが、その中でも論理的であり、それほどではありません。 その結果、PHPでは次の配列キーを取得します:$ _GET ['aa'] ['bb'] = 11 ccはどこに行きましたか? 「?Aa [bb] cc = 11」とは何でしょうか? 同じこと($ _GET ['aa'] ['bb'] = 11)。 再び「cc」がどこに行ったのかは明らかではありません。 しかし、最も興味深いのは先です!



「?Aa [bbb = 11」を与えるものは何ですか? もちろん$ _GET ['aa_bbb'] = 11、どうして推測できないのか、これは上記の例の直観的な続きです:)

「?aa [bb [ccc]] = 11」では、$ _GET ['aa'] ['bb [ccc'] = 11になります。 2番目のブラケットが再び盗まれました!



さて、プログラムのピーク: "?[Aa] = 7"。 var_dump($ _ GET)は以下を返します。Array()は空の配列です。 「ああ、私のgetはどこですか?」おそらく、少なくとも$ _GET ['']キーを作成する方が論理的でしょう。 しかし、これらすべての論争の場合には多くの選択肢があり、それらの正しさについて長い間議論することができます。



これらは変態です。 この動作は、言語の最初のバージョンでは、パラメーターが配列ではなく変数に解析されたという事実を部分的に説明しています。 それから、禁じられている文字をアンダースコアに置き換えるのが慣習でした。 上記の例の1つでは、このような置換が観察されます。 このパラメーターが配列と見なされない場合に有効です。 しかし、パラメーターが配列として認識される場合、新しいトリッキーなロジックがオンになります。これは、場合によっては過剰を単にスローオフし、他の場合は好ましくないものの一部のみをスローバックし、その一部はキーに完全に押し込まれます。 直感的でも論理的でもありません。



UPD おそらく、この投稿の目標は決してPHPを再び呪うことではないことを付け加える価値があります。 そうでなければ、この興味深い言語が発達した条件ではほとんど出てこなかったかもしれないことを完全に理解しています:)



All Articles