2009年02月17日 01:55

PHP extract()の使い方を探る

| http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/442

フレームワーク眺めていると、時々見かけるextract()。 慎重に使えば結構便利なのかも?

サンプルコード

ビューファイルからコントローラーの値を参照しやすくextract()を使ってみる。

sanitize.php


// サニタイズ用
// グローバル関数
function s($value)
{
    return htmlentities($value, ENT_QUOTES, mb_internal_encoding());
}

Controller.php



class Controller
{
    private $data = null;
    private $clean = null;

    private $viewfile = "test.php";

    public function __construct()
    {
        $this->data = $_POST;
        $this->validate();
    }

    public function display()
    {
        extract($this->clean);
        require_once($this->view_file);
    }

    private function validate()
    {
        /**
         * $this->dataをバリデート
         *
         * バリデートOKのdataをcleanにセット
         * viewでforeach等でまわす場合、
         * keyもちゃんとバリデートしないと危ない。
         */
        $this->setClean($data);
    }

    private function setClean($data)
    {
        $this->clean = $data;
    }
}

test.php


// test.php
<?
echo s($User["name"]) . "<br />";
echo s($User["mail"]) . "<br />";
?>

クライアントコード


// クライアントコード
<?
require_once("sanitize.php");
require_once("Controller.php");

$c = new Controller();
$c->display();
?>

<form>
<input type="text" name="data[User][name]" value="test" />
<input type="text" name="data[User][mail]" value="test@example.com" />
<input type="submit" value="送信" />
</form>


実行結果

test
test@example.com

ビューファイルで$User["name"]と短くかけるのはいいですが、 $Userの出所がわかりずらいので

Controller.php


public function display()
{
    $clean = $this->clean;
    require_once($this->view_file);
}

test.php


// test.php
<?
echo s($clean["User"]["name"]) . "<br />";
echo s($clean["User"]["mail"]) . "<br />";
?>

と書くのがやっぱり正解なのかも。 フレームワーク制作時以外、あまり使うことなさそう?

参照サイト
初めてのPHP & MySQL 第2版

著者 : Michele E. Davis / 金額 : ¥ 3,570

PHP extract()の使い方を探るタグ:

トラックバック

  • http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/442
コメント (0)
コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)





この情報を登録しますか?


先月アクセスが多かったページ