KANTENNA.COM

Solarized

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.  ?>

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

参照サイト

トラックバック(0)

コメント

コメントする
Name
Email Address
URL
TIME LINE
2012
02.08

[Ubuntu11.10]Winows XPユーザーがUbuntuを使ってみて

Windows XPとUbuntuのデュアルブート環境にしてみておもったこと。

2012
02.03

[jQuery]closest()とparents()

今から16年前Netscapeブラウザのソースコードの公開方法の会議の中で、初めてオープンソースという言葉が使われた今日、 みなさんいかがお過ごしでしょうか。

今回の投稿はそれとは関係のないjQueryのparents()とclosest()が 似てたので何が違うのか試した時のメモです。

2012
02.01

[jQuery Mobile]初期化イベントメモ

jQuery Mobileは読み込まれてから

mobileinit -> pagebeforecreate -> pagecreate -> pageinit

の順番でイベントが発生する。

2012
02.01

[WordPress]管理画面のフッタのフィルタとアクション。

時間も時間なので、あまり使用頻度の高くない微妙なネタを。

会員制サイトなどで不特定多数の人にログインさせる場合、フッタのバージョン情報は隠しておきたかったり、 こじゃれたメッセージを表示したいときとか使うアクションとフィルタ。

2012
01.28

[WordPress] ブログの情報を取得する方法とノーキャッシュ疑惑

ブログのget_bloginfo()で取れないデータが必要な場合に使うもの。

2012
01.26

[jQuery Mobile]ダイアログ

jQuery Mobileにおけるダイアログの扱いはウインドウではなくページ。 なので通常のページと同様に扱える。ダイアログウインドウを出す。じゃなくダイアログページに遷移する。的な。

2012
01.25

[Ubuntu11.10]Ubuntuのインストール後の設定

インストール完了後の環境構築。PC起動時いちいちBIOSからブートドライブ選んで ブートするのかと思ってたら起動時にOS選択画面が出てくる。

すばらしいですね。

2012
01.24
2012
01.23

MinGW+Mintty+Git

MinGW+Mintty+Gitをやろうとして失敗に終わった。このエントリーには収穫できるものはありません。