2012-03-13 16 views
2

可変変数を使用して、とりわけ$ _GET配列と$ _POST配列の両方に動的にアクセスしようとしています。私がこれをやろうとしている理由は、それぞれに特定の反復を宣言する必要なしに、複数の配列に対して同様のアクションを実行できるようにするためです。私はこれが可能であることを合理的に確信しています.PHPのドキュメントでは、可変変数を使用して配列に動的にアクセスできると言われていますが、動作させることができません。簡単なデモンストレーションは、あるプロパティが設定されていることを確認しようとしているときです。私は常にnullを取得上記のスクリプトを実行すると

if(isset(${$this->_array}[$property])) { return ${$this->_array}[$property]; } 
else { return null; } 

、しかし私は、静的に手動で$ _GETや$ _POSTを使用して、所望の特性を求めたとき、私は望ましい結果を得ることができます。私はトリプル$this->_array$propertyをチェックして、正しい文字列値を返しています。このような配列にこれらの配列を使用できないのですか、何か間違っていますか?

+3

http://en.wikipedia.org/wiki/Code_smell – ceejayoz

+0

@ceejayozであれば知らないことができますOK?これまでのことを聞いて、このコンセプトに慣れてきました。何を言おうとしているのですか?私のコードは他のどこかで間違っていますか?私はすでに、上記のステートメントに渡される変数が正しいと判断しました。他に何ができるかわからない。 – mseancole

+0

私は可変変数を使用することは、通常、あなたが何か間違っていることを示していると言っています。ほとんどの場合、後続の開発者があなたを殺したくないような良い方法があります。 – ceejayoz

答えて

2

すでに$_GET$_POSTの両方を含む配列があります。名前は$_REQUESTです。それでも、それはrequest_order設定に応じて$_COOKIEの内容を含むことができますが、デフォルトはちょうど$_GET$_POSTです。

0

both the $_GET and $_POST arrays, among othersにアクセスしたいとします。これらの「その他」は何ですか? $_REQUESTを使用して、$_GET,$_POST、および$_COOKIEの内容を一度に確認できます。

3

何が間違っていても、可変変数を使用するとおそらくそれが悪化します。あなた自身の正気のために、やめてください。どのような状況下でも、実稼動コードにデプロイしてはいけません。デバッグすることは不可能であり、コード内でそれらを使用することは、他の誰かが自分の足で書いたものを読み取ろうとするようなものです。彼らが特に器用な足を持っているなら、おそらくあなたは彼らが何をしているのか理解することができます。しかし、99.9999%の時間では、通常の配列を使う方が良いでしょう。

言われている代わりに、$_REQUESTを試してください。

4

スーパーグローバルは、クラスやメソッドの内部変数変数として参照することはできませんので、これは動作します:

<?php 
$var = "_GET"; 
print_r(${$var}); 

しかし、これはしません:

<?php 
test(); 
function test() { 
    $var = "_GET"; 
    print_r(${$var}); 
} 

私はより良い方法があると思われますあなたが達成しようとしていることをやりなさい。

http://php.net/manual/en/language.variables.superglobals.php#refsect1-language.variables.superglobals-notes

+0

これはうまくいきませんでした。私はアレイ全体を印刷してみましたが、言及するのを忘れました。しかし、ありがとう – mseancole

+0

私のコードは動作しました。なぜそれがあなたのために働かなかったのか説明するために私の答えを更新しました。 – jasonlfunk

0

あなたはこれを行うが、それは良いコーディング練習

if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $method = '_POST'; 
} 
else { 
    $method = '_GET'; 
} 
$data = $$method; 
関連する問題