PHP_PHP チュートリアルでの extract() 関数の魔法のような使い方の分析

WBOY
リリース: 2016-07-21 15:17:53
オリジナル
1067 人が閲覧しました

最近、すごい人のコードを見ていたら、extract()というとても便利な関数を見つけました。その主な機能は、キー名が変数名として使用され、要素の値が変数の値を取得するなど、$_POST や $_GET の要素を簡単に抽出するための関数が提供されています。次のコードを直接使用できます:

form.html

コードをコピー コードは次のとおりです:

<入力タイプ="テキスト" name="ユーザー名"> <入力タイプ="パスワード">
action.php で、extract() 関数を使用して $_POST グローバル データを抽出します。
action.php


コードをコピー

コードは次のとおりです:
extract($ _POST); //$username = $_POST['username'];
//$password = $_POST['password']; と同等です


あはは、PHP マニュアルの詳細な説明は次のとおりです。

extract
(PHP 4, PHP 5)
extract — 配列から変数を現在のシンボル テーブルにインポートします


命令
int extract (array $var_array [, int $extract_type [, string $prefix ]] )

この関数は、配列から現​​在のシンボル テーブルに変数をインポートするために使用されます。連想配列 var_array を引数として受け入れ、キー名を変数名として、値を変数値として使用します。キーと値のペアごとに、extract_type パラメーターと prefix パラメーターの影響を受ける変数が現在のシンボル テーブルに作成されます。


注: バージョン 4.0.5 以降、この関数は抽出された変数の数を返します。

注: EXTR_IF_EXISTS と EXTR_PREFIX_IF_EXISTS はバージョン 4.2.0 で導入されました。

注: EXTR_REFS はバージョン 4.3.0 で導入されました。

extract() は、各キー名をチェックして正当な変数名として使用できるかどうかを確認し、シンボル テーブル内の既存の変数名との競合もチェックします。不正なキー名、数値名、および競合するキー名の処理は、extract_type パラメータによって決定されます。次の値のいずれかを指定できます:

EXTR_OVERWRITE
競合がある場合は、既存の変数を上書きします。
EXTR_SKIP
競合がある場合、既存の変数は上書きされません。
EXTR_PREFIX_SAME
競合がある場合は、変数名の前に prefix を付けます。
EXTR_PREFIX_ALL
すべての変数名にプレフィックスを追加します。 PHP 4.0.5 以降、これには数値インデックスの処理も含まれます。
EXTR_PREFIX_INVALID
不正な/数値変数名にのみプレフィックスを追加します。このタグはPHP 4.0.5で新たに追加されました。
EXTR_IF_EXISTS
現在のシンボル テーブルに既に存在する場合にのみ、同じ名前の変数の値を上書きします。その他は加工しておりません。これは、一連の正当な変数が定義されており、$_REQUEST などの配列から値を抽出してこれらの変数を上書きする場合に使用できます。このタグはPHP 4.2.0で新たに追加されました。
EXTR_PREFIX_IF_EXISTS
現在のシンボルテーブルに同じ名前の変数がすでに存在する場合にのみ、プレフィックス付きの変数名を作成し、それ以外は何も処理されません。このタグはPHP 4.2.0で新たに追加されました。
EXTR_REFS
変数を参照として抽出します。これは、インポートされた変数が依然として var_array パラメーターの値を参照していることを強く示しています。このフラグは単独で使用することも、extract_type で OR を使用して他のフラグと組み合わせて使用​​することもできます。このタグはPHP 4.3.0で新たに追加されました。
extract_type が指定されていない場合は、EXTR_OVERWRITE が想定されます。

プレフィックスは、extract_type の値が EXTR_PREFIX_SAME、EXTR_PREFIX_ALL、EXTR_PREFIX_INVALID、または EXTR_PREFIX_IF_EXISTS の場合にのみ必要であることに注意してください。プレフィックスを付加した結果が正当な変数名ではない場合、シンボルテーブルにはインポートされません。プレフィックスと配列キー名の間にアンダースコアが自動的に追加されます。

extract() は、シンボル テーブルに正常にインポートされた変数の数を返します。

警告

ユーザー入力 ($_GET,...) など、信頼できないデータに対して extract() を使用しないでください。たとえば、register_globals に依存する古いコードを一時的に実行するためにこれを行う場合は、必ず EXTR_SKIP などの上書きされない extract_type 値を使用し、抽出は php の variables_order で定義された順序で行う必要があることに注意してください。イニ。

extract() の使用法の 1 つは、wddx_deserialize() によって返された結合配列の内容をシンボル テーブル変数にインポートすることです。

Example#1 extract() example



コードをコピー

コードは次のとおりです:
/* $var_array が wddx_deserialize*/ によって返される配列であると仮定します*/ $size = "large "; $ var_array = array("color" => "青",
"size" => "中",
"shape" => "球");
extract($var_array, EXTR_PREFIX_SAME, "wddx") ;
エコー「$color、$size、$wddx_sizen」

;
上記の例は出力します:

青、大、球、中

$size は、EXTR_PREFIX_SAME が指定されているためオーバーライドされず、これにより $wddx_size が確立されます。 EXTR_SKIP が指定されている場合、$wddx_size も作成されません。 EXTR_OVERWRITE は $size の値を「medium」にし、EXTR_PREFIX_ALL は新しい変数 $wddx_color、$wddx_size、$wddx_shape を作成します。

連想配列を使用する必要があります。EXTR_PREFIX_ALL または EXTR_PREFIX_INVALID が使用されない限り、数値インデックス付き配列は結果を生成しません。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/325668.html技術記事最近、すごい人のコードを見ていたら、extract() というとても便利な関数を見つけました。その主な機能は、キー名を変数名、要素の値を変数値として配列を展開することです。 . それは言えます...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート