今日のぺちぱー

PHPのメモ帳です。

243 views

以下のような連想配列を関数で受け取る場合を考える。

$user = [
    "name" => "yamada",
    "mail" => "momomo@yaoo.co.jp",
    "sex"  => "man"
];

これを関数で受け取り、キーごとに変数を作る場合、次のようなコードを書く。

function oldType($user) {
    $name = $user["name"];
    $mail = $user["mail"];
    $sex  = $user["sex"];

    print("name: {$name} mail:{$mail} sex:{$sex}\n");
    print_r($user);
}

上記の2~4行目のようにキーごとに変数を定義するのはすごく面倒。
例では3個だが100個とか来ると、きつい。

そんなときはextractを使う。

function adaptedExtract($user) {
    extract($user);
    print("name: {$name} mail:{$mail} sex:{$sex}\n");
    print_r($user);
}

すると、キー名が変数になる。
上記ではname、mail、sexは定義していないのに定義されているものとして3行目で$name、$mail、$sexを出力できる。

参考までに出力結果を以下に記す。

name: yamada mail:momomo@yaoo.co.jp sex:man
Array
(
    [name] => yamada
    [mail] => momomo@yaoo.co.jp
    [sex] => man
)
name: yamada mail:momomo@yaoo.co.jp sex:man
Array
(
    [name] => yamada
    [mail] => momomo@yaoo.co.jp
    [sex] => man
)

ただし

変数が宣言されていないので、後ろでうっかり上書きしてしまうとかありそう。
むやみやたらと使うのはNGと考えたほうがよい。
ソースの見直しで変数名がgrepに引っかからないので調査が難航することもありえるので、使わないほうがよいか。

Page 6 of 9.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

マッスル

自己紹介

本サイトの作成者。
趣味:プログラム/水耕栽培/仮想通貨/激辛好き
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
仮想通貨はNEMが好き。
水耕栽培は激辛好きが高じて、キャロライナ・リーパーの栽培にチャレンジ中。

サイト/ブログ

https://www.osumoi-stdio.com/pyarticle/

ツイッター

@darkimpact0626