ホームページ > php教程 > php手册 > PHP における extract() 関数の魔法のような使い方の分析

PHP における extract() 関数の魔法のような使い方の分析

WBOY
リリース: 2016-06-13 11:59:38
オリジナル
1113 人が閲覧しました

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

form.html

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



input type="password" name="password">


action.php で、extract() 関数を使用して、 $_POST グローバル データ:
action.php

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

extract($_POST);
// $username = $_POST['username'];
//$ パスワード = $_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
すべての変数名の前に prefix を付けます。 PHP 4.0.5 以降、これには数値インデックスの処理も含まれます。
EXTR_PREFIX_INVALID
不正な変数名または数値変数名のみに prefix を付けます。このタグは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() によって返された結合配列の内容をシンボル テーブル変数にインポートすることです。

例 #1 extract() 例



コードをコピー

コードは次のとおりです。 < ?php

/* $var_array が wddx_deserialize によって返される配列であると仮定します*/

$size = “large”;
$var_array = array(”color” => “blue”,
”サイズ” => ; "中",
"形状" => "球");
extract($var_array, EXTR_PREFIX_SAME, "wddx"); 、$wddx_sizen ”;
?>
上記の例は出力します:

青、大、球、中

EXTR_PREFIX_SAME が指定されているため、$size はオーバーライドされず、これにより $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 が使用されない限り、数値インデックス付き配列は結果を生成しません。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート