HOME>WEBプログラム覚書>PHP extract()の使い方を探る

PHP extract()の使い方を探る

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

サンプルコード

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

sanitize.php

PHP

  1. <?php
  2. // サニタイズ用
  3. // グローバル関数
  4. function s($value)
  5. {
  6.     return htmlentities($value, ENT_QUOTES, mb_internal_encoding());
  7. }
  8. ?>

Controller.php

PHP

  1. <?php
  2. class Controller
  3. {
  4.     private $data = null;
  5.     private $clean = null;
  6.  
  7.     private $viewfile = "test.php";
  8.  
  9.     public function __construct()
  10.     {
  11.         $this->data = $_POST;
  12.         $this->validate();
  13.     }
  14.  
  15.     public function display()
  16.     {
  17.         extract($this->clean);
  18.         require_once($this->view_file);
  19.     }
  20.  
  21.     private function validate()
  22.     {
  23.         /**
  24.          * $this->dataをバリデート
  25.          *
  26.          * バリデートOKのdataをcleanにセット
  27.          * viewでforeach等でまわす場合、
  28.          * keyもちゃんとバリデートしないと危ない。
  29.          */
  30.         $this->setClean($data);
  31.     }
  32.  
  33.     private function setClean($data)
  34.     {
  35.         $this->clean = $data;
  36.     }
  37. }
  38. ?>

test.php

PHP

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

クライアントコード

PHP

  1. <?php
  2. // クライアントコード
  3. <?php
  4. require_once("sanitize.php");
  5. require_once("Controller.php");
  6.  
  7. $c = new Controller();
  8. $c->display();
  9. ?>
  10.  
  11. <form>
  12. <input type="text" name="data[User][name]" value="test" />
  13. <input type="text" name="data[User][mail]" value="test@example.com" />
  14. <input type="submit" value="送信" />
  15. </form>
  16.  
  17. ?>

実行結果

test
test@example.com

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

Controller.php

  1. <?php
  2. public function display()
  3. {
  4.     $clean = $this->clean;
  5.     require_once($this->view_file);
  6. }
  7. ?>

test.php

  1. <?php
  2. echo s($clean["User"]["name"]) . "<br />";
  3. echo s($clean["User"]["mail"]) . "<br />";
  4.  
  5. ?>

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

参照サイト
投稿日 2009年2月17日 01:55
カテゴリ PHP
タグ サンプルコード | 関数
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1166

コメント

コメントする
Name
Email Address
URL