4
3

More than 5 years have passed since last update.

引数の変数名の衝突を気にせずに extract する

Last updated at Posted at 2013-07-11

PHP をテンプレートのように使いたいとき、extract で連想配列をシンボルテーブルにインポートすることがありますが・・・

<?php
function render1($filename, array $params)
{
    extract($params);
    include $filename;
}

このようにすると $params"filename" というキーが含まれていると $filename が上書きされてしまい非常にマズイことになります。

<?php
render1("template.php", ["filename" => "ore_no_himitu.txt"]);

なので次のように extractEXTR_SKIP を指定して名前が衝突したときは無視されるようにしていました。

<?php
function render2($filename, array $params)
{
    extract($params, EXTR_SKIP);
    include $filename;
}

が、次のようにすれば関数のスコープに引数が無いので衝突を気にする必要がなくなります。

<?php
function render3(/*$filename, array $params*/)
{
    extract(func_get_arg(1));
    include func_get_arg(0);
}

参考

Zend_View::_run()

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3