5月 22

この記事をブックマークする : このページをはてなブックマークに追加 このページをLivedoorクリップ! このページをニフティクリップに登録 newsing it! このページをdel.icio.usに登録 このページをBuzzurlにブックマーク

前回の記事「オブジェクト指向型のプログラムの考え方(1)」
さて、今回の例は「PHPからwordpress(以後WP)に記事を投稿するシステム」になります。

私がオブジェクト指向プログラミングを書くときはまず外枠を作って、あとは後ろから逆向きに考えていきます。っと言っても分からないので例題を作成しながら手順を説明していきましょう。

まず外枠ですが、これは今回作るプログラムがいったい何をする物なのか?という一番大きな区切りです。
「WPに記事を投稿する」場合の外枠を考えてみましょう。
この機能だけであれば「WPに記事を投稿する」というのが外枠になりますが、それでは寂しいので汎用性を持たせておいて新規投稿だけじゃなくてWP関連全てを扱うというのを外枠に設定しましょう。
それをそのままプログラムに書けば class wordpress () { } が作れます。

外枠ができたので、次は何をすればいいのかを分解して考えていきます。
例外はあるでしょうが基本的に動詞ごとに機能を分解していきます。

今回必要なのは「WPに記事を投稿する」という機能ですので、この機能を持つ関数を名前だけでいいので作ってしまいます。これで
class wordpress {
 function sendWpNewPost( ) { }
}
までができました。

この次も後ろから考えます。つまりこの関数が何をするかは気にしないで最終的に何が出力されるのか?を考えちゃいます。
この関数はWPに記事を投稿するという目的の関数ですので、とりあえずは投稿が成功したかどうかが分かればいいですね。って事で return に true か false が出力される事まで決まりました。

では、次は何をすれば先ほどの出力結果を得られるのかを考えます。
出力結果はWPに投稿が成功したかどうかなのでWPにどうやって投稿すればいいかを探すと、WPにはXMLを受け取って色々と操作ができるXMLRPC APIを持っているらしいので今回はそれを使って投稿します。

WPのXMLRPC APIについては今回は詳しくは説明しませんが、新規投稿するという意味のXMLを作成してそれを送信する事でWP側から結果をXMLで受け取る事ができるようです。

という事でここで新しくやることが増えました。これを分解して考えると「新規投稿するというXMLを作成する」「XMLを送信する」「結果を返す」の3つに分けられます。このまま3つに分けてもいいのですが、少し考えてみると「新規投稿するというXMLを作成する」というのは自分自身の関数sendWpNewPostと1:1で対応する機能なのでそのままsendWpNewPost上に書いてしまいます。また、同じように「XMLを送信する」と「結果を返す」については1:1に対応していますね。そういう場合もくっつけてしまって1つの関数 function sendXml( ) { } を作成します。

sendXmlも同じように下から考えて作っていきます、出力はXMLを送信した時に返ってきた結果で、その結果を得るには~を考えると最終的には送信するXMLが必要だとわかります。その関数内で必要な情報がある場合はそれを関数の引数に入れて
// XMLの送信
function sendXml($message) {
 $response = $this->client->send($message);
 return $response;
}
ができます。基本機能としてはこれでいいのですが、このままでは結果がXMLだったりエラーの処理が入っていないのでそれらについては用途によって追加します。
これでXMLを渡せば結果が返ってきますので、その結果を見てtrueかfalseを返す事ができるようになりました。

次は送信するためのXMLを作成するには~・・・と下方からどんどん何が必要なのかを考えながら最終的に必要な情報がでてくるまで上に上にプログラムを足していく形で作成し、外部から必要な情報を引数にいれていきます。(このとき、クラスの中ではGLOBALやDBを直接参照したりという事は基本的にしないようにしましょう。それらの情報が欲しい場合は引数でもらってくるようにしてください。)

これでfunction部分は何となく作れるようになりましたかね?
長くなってきたので次回はコンストラクタとオブジェクト変数の使い方について書いていきます

この記事をブックマークする : このページをはてなブックマークに追加 このページをLivedoorクリップ! このページをニフティクリップに登録 newsing it! このページをdel.icio.usに登録 このページをBuzzurlにブックマーク

Comments are closed.