• ベストアンサー

ラッパークラスって何ですか?

PHPにおける、ラッパークラスの定義を教えてください。 検索すると、JAVAに関する説明しか出てこなかったので…。 親クラスってことでしょうか? 例えば、$_SESSION変数のラッパークラス って、どんな意味なのでしょうか? $_SESSIONに関する処理を自分で使いやすいように まとめたクラスのことでしょうか? 普通のクラスとは、何が違うのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

ラッパークラスというのは、tomonkey0225さんもおっしゃっているように、別のクラスなどを包むようなクラスのことです。 セッション変数のラッパークラスというのは、基本的には、セッション変数に何でも値など挿入して、PHPのスクリプトを終了すれば、終了後もセッションが生きている間は保存される、という機能は提供されますが、 もっとアクセスするときにアクセスしやすいようにしたり、ちょっとした機能を増やしてやったりするようなものです。 例えば、 <?php class My_Session{ protected $key = "mysession"; public function __construct($key){ session_start(); $this->key = $key; } public function set($name, $value=null){ if(is_array($name)){ foreach($name as $key => $value){ $this->set($key, $value); }else{ $_SESSION[$this->key][$name] = $value; } } public function get($name, $default = null){ return isset($_SESSION[$this->key][$name]) ? $_SESSION[$this->key][$name] : $default; } } } ?> とか、かなりざっくりですが作ったとします。 そうすると、 <?php $session = new My_Session('session_name_key'); //インスタンス作成した時点でsessionを開始し、このクラスが扱うセッション変数のキーは「sessoin_name_key」以下にフォーカスが当たる。 $session->set('input_name', 'aiueo'); //上記の通り必ず$_SESSION['session_name_key']['input_name']に代入される $value = $session->get('notdefined', 'test'); //$_SESSION['session_name_key']['notdefined']が存在しなかったら第二引数の「test」が$valueに代入される。 ?> とか。単純にセッション変数を配列で扱うよりも、コードがすっきりします。 ※この場合は自分で書かなくてもZend FrameworkにZend_Session_Namespaceクラスといった便利なものがあります。 ラッパークラスは、セッションだけではなくて、例えば、 データベースに接続するためのPDOというクラスがありますが、 これを最初に接続するデータベースのパスだけ指定すれば、SQL文を発行しなくても内部的に勝手に処理してくれる、 Doctrineというライブラリがあります。 他にも、外部サーバに向けてHTTP通信を行う必要がある場合、fsockopen関数などを使って、ゴリゴリHTTPヘッダを記述擦る必要があるものが、Zend_Http_Clientクラスなんかを使うとそれらを抽象化して簡単に使えるようにしたものがあります。 このように、もともとのクラスや関数などが複雑な手続きをする必要がある物を、自分の目的に合わせて、もっと抽象度を上げて、簡単に扱えるようにしたものをラッパークラスと言うのだと思います。

re999
質問者

お礼

回答ありがとうございました。 >別のクラスなどを包むようなクラス >もともとのクラスや関数などが複雑な手続きをする必要がある物を、自分の目的に合わせて、もっと抽象度を上げて、簡単に扱えるようにしたもの よく分かりました 後、具体的なコードを提示いただいたので、 大変分かりやすかったです。 コンストラクタに入れといて、インスタンス作成時に、 自動的に処理させるなんて、便利そうですねー >Doctrineというライブラリ 初めて聞きました。これはちょっと調べてみたいと思います >Zend_Http_Clientクラス こちらも情報ありがとうございます。 Zend系についても、機会があれば触れてみたいと思っていたので、 メモしとこうと思います

その他の回答 (1)

回答No.1

以前に私もそれで調べた事があります。 結局いまいちわからずなんですが 基本的に質問者様の考えでいいと思います。 javaのラッパークラスというと型の代表的なラッパーがでてきますが あくまでも今あるクラスを継承し使いやすくカスタマイズされたクラス。 といった感じかもしれません。 個人的にライブラリと同じようなもんだと認識していますが そのライブラリをさらに使いやすくしたラッパーなんて使い方も出来るわけです。 そもそもラップwrapというワード自体が「包む」って事なんで そういう事なのかなぁと。 >普通のクラスとは、何が違うのでしょうか? 基本的に何も違わないです。 ただラッパークラスというものはあくまでも何かを継承し使いやすくカスタマイズされたクラスであるという事ぐらいじゃないでしょうか? 的確な解答が出来ずに申し訳ありません。

re999
質問者

補足

回答ありがとうございました >基本的に何も違わないです。 >ただラッパークラスというものはあくまでも何かを継承し使いやすくカスタマイズされたクラスであるという事ぐらいじゃないでしょうか? 何となくイメージできました

関連するQ&A