$ _REQUESTスーパーグローバル配列を例として使用して、スーパーグローバル配列のハンドラーを実装するという興味深いアイデアがあります。
フォームから受信したデータを受信、処理、保護する簡単な方法など。 のように見える :
if (!isset($_REQUEST['var'])) $var = NULL; else $var = $_REQUEST['var']; //
もちろん、すべての自尊心のあるフレームワークは、たとえば、プロジェクト内の任意の場所で使用できる個別の静的クラスメソッドを考え、必要な値を名前で簡単に取得する場合など、より美しくなります。
class Request { public static function GetVarRequest( $var ){ if (!isset($_REQUEST[$var])) $var = NULL; else $var = $_REQUEST['var']; // return $var; } } $var = Request::GetVarRequest('var');
そして最後に要点を説明します。 PHPには、「 変数の変数 」(シンボリックリンク)などの概念があり、このソリューションに私を駆り立てました。 説明と例をコピーしても意味がありません。
これは上記とどのように関係しますか? 自転車を思いついたのかもしれませんが、それでも。 すぐに実用的なソリューションの一部を提供します:
// , $_REQUEST[ 'var1' ] = 'VAR1'; $_REQUEST[ 'var2' ] = 'VAR2'; $_REQUEST[ 'var3' ] = 'VAR3'; echo '<pre>'; print_r( $_REQUEST ); echo '</pre>'; $r = $_REQUEST; $k = array_keys( $r ); $c = count( $r ); for ( $i = 0; $i < $c; $i++ ){ $v = $k[ $i ]; $$v = $r[ $k[ $i ] ]; // } echo '<br />var1 - '.$var1; // : "var1 - VAR1" echo '<br />var2 - '.$var2; // : "var2 - VAR2" echo '<br />var3 - '.$var3; // : "var3 - VAR3"
さらに、これはクラスのプロパティを使用して実行できます。
class VarsVar { // } $obj = new VarsVar(); $_REQUEST[ 'var1' ] = 'VAR1'; $_REQUEST[ 'var2' ] = 'VAR2'; $_REQUEST[ 'var3' ] = 'VAR3'; echo '<pre>';print_r($_REQUEST);echo '</pre>'; $r = $_REQUEST; $k = array_keys( $r ); $c = count( $r ); for ( $i = 0; $i < $c; $i++ ){ $v = $k[ $i ]; $obj->$v = $r[ $k[ $i ] ]; } echo '<br />var1 - '.$obj->var1; // : "var1 - VAR1" echo '<br />var2 - '.$obj->var2; // : "var2 - VAR2" echo '<br />var3 - '.$obj->var3; // : "var3 - VAR3"
つまり、このケースを静的関数でフレーム化し、クラスのインスタンスのオブジェクトを(まだ100%テストされていない状態で)渡すと、いつでもどこでも初期化できます。
class Request { public static function GetVarRequest( $obj ){ $r = $_REQUEST; $k = array_keys( $r ); $c = count( $r ); for ( $i = 0; $i < $c; $i++ ){ $v = $k[ $i ]; $obj->$v = $r[ $k[ $i ] ]; } } } class VarsVar {} $obj = new VarsVar(); Request::GetVarRequest( $obj ); // PHP 5 , .
要約すると、
短所 :
- $ _REQUEST自体に変数がないため、欠落している変数の使用に対する保護はありません(「if(isset($ var))...」を常に使用する場合を除く)。これにより、スクリプトで致命的なエラーが発生します。
長所 :
- 使用されるプロパティがクラスで宣言されている場合、保護は有効です。
- 完全に自動化された初期化。
- 必要な変数/プロパティをすぐに使用する機能。
結論:普遍的で非常に簡単な方法を使用して、$ _REQUESTから不要ながらくたなしでデータを取得できます。 データが常に100%に達していることを確認し、OOPを使用すると、クラスプロパティが初期化され、フラグとしてのこのメソッドが手に入ります=))
この決定は今日だけで始まり、あなたと共有しているため、まだ戦闘でテストされていません。 ここにいくつかの簡単なルールが適用されます:
- OOPを使用して、そのプロパティでクラスを無効にすることが望ましい。
- $ _REQUESTのキー名は、クラスプロパティの名前と一致する必要があります。
- プロパティはパブリックでなければなりません。
そしてもちろん、ファンタジーの世界からのクレイジーな発言。 たとえば、この種類の$$$ var変数がPHPコアに縫い付けられていて、初期化がないためにアクセスするとエラーが表示されず、そのような変数がすぐにNULL値で作成される場合、私が提案した方法は問題なく動作します。