今から始める MySQL入門(6)
DAOパターンですっきりコーディング!
鶴長 鎮一(book@tsurunaga.jp)
2007/05/15
連載第5回「MySQLの基礎を学ぼう [サンプル開発編]」では、MySQLサーバと連携した簡易オンラインストアを作成しました。
ただし、固定された商品アイテムの取り扱いのみで、商品の追加や価格の変更を柔軟に行うことができませんでした。今回からは、商品アイテムもMySQLで管理できるよう『簡易在庫管理システム』の作成に取り掛かります。
各商品アイテムをデータベースに登録するため、オンラインストア開発以上にデータベースへのアクセスが発生します。そこで、データベース操作を一まとめにしたクラスを作成して、そのクラスを利用してデータベースへアクセスするようにします。
| 関連リンク: | |
| 連載 快速MySQLでデータベースアプリ! http://www.atmarkit.co.jp/flinux/index/indexfiles/mysqlindex.html |
|
| 連載 今から始める MySQL入門 http://www.atmarkit.co.jp/flinux/index/indexfiles/mysql5index.html |
|
クラスを利用する
ご存じのとおり、PHP5はJavaに匹敵する十分なオブジェクト指向性を有しています。「クラス化」「継承」「オーバライド」……。
こうした用語に「げっ!」と思った方、ご安心ください。今回は、簡単なサンプルを例に、最低限必要となる知識を中心に解説していきます。とにかく身構えずにチャレンジしてください。
なお、PHP5で強化されたオブジェクト指向性については「オブジェクト指向言語に生まれ変わるPHP5」を参考にしてください。また、オブジェクト指向全般について学習したい場合は「5分で絶対に分かるオブジェクト指向」もお勧めです。
■サンプルでセッター、ゲッターを学ぶ
ここでは、サンプルを用いて「マジックメソッド」「アクセス修飾子」「セッター・ゲッター」の使用例について解説します。
まずは、TestClass.php(リスト1)でTestClassを定義し、それを取り込み利用するTest.php(リスト2)を用意します。
1 <?php |
TestClass(リスト1)は、1つの変数「$id」と変数にアクセスするためのセッターメソッド「setId()」とゲッターメソッド「getId()」を持った単純なクラスです。
8、13、18行目
「__(アンダースコア2つ)」で始まるメソッドは、マジックメソッドと呼ばれる特別な意味を持ったメソッドです。「__construct()」は初期化される際に、「__destruct()」は破棄される際に呼び出されます。
各メソッドや変数の前には、「private」や「public」といった修飾子を設け、アクセス制限を施します。privateはクラス内からのみ参照可能で、publicはクラス内外からの参照が可能です。ほかに同クラスと子クラス(そのクラスを継承して作成されたクラス)からの参照が可能な「protected」が用意されています。修飾子が省略された場合は、publicと同様の扱いになります。
5行目
TestClassの変数$idにはprivateが設けられ、外部クラスから参照することができません。
23、27行目
$idにアクセスするには、setId()(セッターメソッド)、getId()(ゲッターメソッド)を使用します。そのため、2つのメソッドは外部から利用できるようpublicが設けられています。
こうして外部から使用できる変数やメソッドを必要最小限にとどめ、設計者の意図しない不正な変数操作が行われないようカプセル化を実施します。
続いて、Test.php(リスト2)を見てみましょう。
1 <?php |
2行目
「require_once」でTestClass.phpファイル(リスト1)を読み込みます。「require」と違い、すでに読み込まれたファイルは再読み込みされません。
4行目
new演算子でTestClassを生成(インスタンス化)します。その際、TestClassの「__construct()」(リスト1の8行目)が実行されます。
5行目
setId()メソッドで$idに文字列「テスト」をセットします。
| 変数の直接参照とセッターの利用例 | |||
TestClassのインスタンス化
ケース1:$idがpublic変数
ケース2:$idがprivate変数
|
6行目
printで$idを表示させます。TestClassに対して、echoやprintが行われた場合、どのような文字を出力するかをTestClassの「__toString()」メソッドで指定できます。
7行目
最後にnullを代入し、TestClassを廃棄して終了します。TestClassが破棄される際には、TestClassの「__destruct()」が実行されます。
それでは、サンプルを実行してみましょう。ちなみに、今回はコマンドラインで確認してみます。
以下のように、phpコマンドでTest.php(リスト2)を実行します。PHPをRPMなどのパッケージからインストールした場合は/usr/bin/php、ソースを使ってインストールした場合は/usr/local/bin/phpで実行できます。
$ php -f Test.php |
| ▼コラム1 PHP 5.2と5.1の__toString()の違い | |||
| __toString()メソッドは、printやechoといった文字列への置換が必要な場合に呼び出されるメソッドです。しかし、PHP 5.2未満では単純なprintを除き、オブジェクトIDが表示されるなど、PHPのバージョンで振る舞いに差異があります(下記参照)。そのため本稿ではどちらでも対応できるよう単純なprint文を使用しています。 例えば、Test.php(リスト2)の6行目を
「PHP5.1」の場合は、以下のような結果となります。
また、「PHP5.2」の場合は、以下のような結果となります。
|
| 第5回へ |
1/4 |
|
||||||||
|
||||||||
| 連載 今から始める MySQL入門 |
| Linux Squareフォーラム データベース関連記事 |
| 連載:快速MySQLでデータベースアプリ!(全11回) 軽快な動作で知られるRDBMS、MySQLでDBアプリの構築を行う。MySQLのインストールに始まり、PerlやRubyなどのスクリプトでデータベースを操作する方法までを完全解説 |
|
| 連載:今から始める MySQL入門(連載中) 定番のLAMP(Linux+Apache+MySQL+PHP)構成でWebアプリケーション開発に挑戦! サンプルアプリの構築を進めながら、基礎知識や操作方法について詳しく解説する |
|
| 連載:Oracleマイスター養成講座(全6回) 本連載では、Oracleの管理・チューニング方法を紹介していく。これからOracleを始める人、そしてOracleをより深く理解したい人のための、一歩踏み込んだ実用講座 |
|
| 連載:DB2マイスター養成講座(全7回) 本連載では、DB2 UDBの実践的な運用・管理方法を紹介していく。DB2を利用するうえで必要な知識を、実運用を前提にDB2のプロが解説 |
|
| 特集:エンタープライズ市場に向かうMySQL
5.0[前編] MySQL 5.0の新機能をアルファ版でチェック 1月に公開された5.0アルファ版は大幅に拡張されており、エンタープライズ市場への進出を予感させる |
|
| 特集:Linuxで動くリレーショナルデータベース・カタログ データベースサーバのOSとしてLinuxを採用するケースが増えている。Linuxで動作する7つの主なリレーショナルデータベースを紹介する。製品導入の際の参考にしてほしい |
|
|
- カーネルゆく年くる年、2009年に来る機能はどれだ? (2009/1/5)
年末年始の休みなど関係なく(?)LKMLは活況を示しています。2009年のマージが有力視されている新機能を紹介しましょう - 中古格安SunサーバでFirebirdに挑戦! (2008/12/26)
Firebirdを導入して、中古SPARCサーバをデータベースサーバに仕立てようとしたものの、目にしたのは大量のエラーだった - Linux Tips (2008/12/24)
− viをGUIで使うには
− Fedora 10で日本語LaTeXを使うには
− LaTeX専用のエディタを使うには - 広がるメインフレームLinuxの適用領域 (2008/12/22)
登場から8年。メインフレームLinuxはどんな目的のために、どのように利用されているのでしょう?
|
|
スポンサーからのお知らせ
- - PR -









