4

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

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

上記のスクリプトを実行すると常に null になりますが、$_GET または $_POST を手動で使用して目的のプロパティを静的に検索すると、目的の結果が得られます。トリプルチェック$this->_arrayを行っ$propertyたところ、正しい文字列値が返されました。これらの配列はそのようなアクセスには使用できませんか、それとも何か間違っていますか?

4

7 に答える 7

7

スーパーグローバル ( など$_POST)は、関数内の可変変数として使用できません

次のよう$post = $_POST;に言ってから使用する'post'と機能しますが、直接使用すると機能し'_POST'ません。

于 2012-03-13T20:39:07.633 に答える
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

于 2012-03-13T20:40:37.507 に答える
3

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

$_REQUESTそうは言っても、代わりに試してください。

于 2012-03-13T20:38:58.210 に答える
2

$_GETと の両方を含む配列が既に存在します$_POST。という名前$_REQUESTです。とは言っても$_COOKIE、設定によっては の内容も含まれrequest_orderますが、デフォルトは と だけ$_GETです$_POST

于 2012-03-13T20:37:36.057 に答える
0

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

于 2012-03-13T20:38:45.817 に答える
0

あなたはこれを行うことができますが、それが良いコーディングプラクティスであるかどうかはわかりません

if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
     $method = '_POST';
 }
 else {
    $method = '_GET';
 }
 $data = $$method;
于 2013-03-12T12:47:34.837 に答える