Home > article > PHPについて適当に

PHPについて適当に

RedLine Magazine : PHP

デザイナの@red_hippyさんがPHPを勉強しているとのことなので適当に。ちなみに僕はあまりPHPを書けないのでバリバリPHPを書いてる人からみたらおかしいところがあるかもしれないけど、なるべくそういうのないよう頑張ります。

そもそもオブジェクト指向でやる必要はあるのか

これは個人的な意見だけど、本職のプログラマでもない限り無理にオブジェクト指向でやる必要はないと思ってる。特に学びはじめのデザイナさんならそこまで複雑なものを作らないだろうし。@red_hippyさんがどの程度のものを作ってるかわからないから一概には言えないけど、掲示板やお問い合わせフォームレベルのものだったらオブジェクト指向である必要はない。

プログラマの人が「PHP5ならオブジェクト指向っすよ!」とか言っても信じちゃいけません! 本当にオブジェクト指向が必要だと思って言ってるのか少し疑問。初心者の人妻にHaskellやらSICPやらすすめる人もいるし、困ったもんだ。

とりあえず、最初は愚直に処理の順番通りに書いていって、「なんかこのコード何回も書いてるなー」ってのが出てきたらそこを関数にするとかで十分。

とは言うものの、@red_hippyさん自身が楽しんでればそれでいいと思うし、Twitterを見る限り楽しんでそうなのでオブジェクト指向の話もちゃんとします。

追記:
これを書いてる途中に@red_hippyさんから、「プログラマさんが勉強するようなことをちゃんとやりたい。」と言われたので上の話はなかったことに。

オブジェクトってなんぞ

では、オブジェクトって何でしょう。

データとそのデータを操作する手続きをまとめたものを「オブジェクト」と呼び、オブジェクトの定義(雛形)を「クラス」と呼びます。PHPでは、オブジェクトは変数(データ)と関数(手続き)をまとめたものです。

@red_hippyさんのブログでも書かれてるけれど、説明的にはこれでOK。これだけでわかる人もそういないと思うけど。 この説明だけだとわかりづらいので「ブログの記事」を例に説明してみる。

まず、「ブログの記事」が持つデータについて考えてみよう。とりあえず思いつくのを適当にあげると「タイトル」「本文」「投稿日」「投稿者」などが考えられる。そしてそのデータを操作する手続きについてはそのデータの保存と取得が考えられる。いわゆるsetter/getter。アクセサとも言う。これを実際のコードに置き換えてみよう。

データがprivateな変数としてあって、それの操作としてsetTitleやgetTitleがあるのがわかる。簡単な例ではあるけど、オブジェクトがデータとそれの手続きをまとめたものというのはこういうこと。ちなみにこの変数のことをメンバ変数の他にインスタンス変数、フィールドとか言ったりする。これは言語によって違うかも。Rubyだと大抵インスタンス変数と言う。

ちなみにマジックメソッドを使ってもいいと思うけど、これはprivateな変数に対してアクセサを作ってしまうので注意が必要。下手すると隠蔽の意味がなくなる。個人的には必要なものだけをアクセスできるようにしたいので、マジックメソッドは使わない。

getter/setterの意味

で、なぜ一々getter/setterを作るのか。一言で言うと、直接データにアクセスされると困る場合が多いから。

まず、困る例を。以下のコードはSquare(正方形)というクラスにもかかわらず、直接データをいじれてしまう為、縦と横で一致しないデータを入れることが出来てしまう。

これを防ぐにはsetterでうまく処理をする必要がある。

heightもしくはwidthに値を保存したら、もう片方にも値をいれることで同じ値になるようにした。メンバ変数をprivateにすることで、この関数を通してでしか値を保存することが出来ない為、縦と横でデータが一致しないということはなくなる。しかし、これはこれで縦を指定しているにもかかわらず、横もかわってるという気持ち悪さが残る。これをもう少し改良して、値の保存はgetLengthという名前にする。これなら関数の名前から縦・横が変わっていても違和感ないだろう。

これと似たような話で、例えばあるデータには数値だけ、文字列だけ入れたいというチェックもsetterでやることができる。

基本的にクラスの中の変数や関数は本当に必要なもの以外privateでいい。別に1つのメンバ変数に対して必ずsetter/getterがいるというわけじゃない。むしろそういうのはよろしくないので、いくつかのメンバ変数をまとめて処理して1つの関数で出力するというのも全然あり。

例えば、prefecture(都道府県)、city(市区町村)、street(通り)というメンバ変数があったら、それぞれpublicにするより、getAddressという関数を作ってその中でそれらを連結して返すという方がいい場合もある。この方が例えば仕様変更でcityがなくなった時に修正する部分が少なくて済むという利点もある。このあたりは抽象化とかデータ構造の分離とかそういう話になるんだけど、ちょっと難しくなりそうなのでこの辺でやめとく。

ちなみにPHPでsetter/getterをちゃんとやってるコードをあまりみない(全部public)なのは、元々オブジェクト指向の言語ではなかったし、そこらへんあまり考えない・知らない人が多いからだと思う。

MVCについて

MVCについてだけど、個人的にはとりあえずフレームワークを使ってしまった方がイメージがつくので理解しやすくなるかと。最初のうちはフレームワーク使わない方がいいって人もいるけど、個人的にはフレームワークを使って疑問に思ったところ、気になったところを調べる方が理解が早い気と思う。

どのフレームワークがオススメとかは正直わからないんだけれど、日本語のドキュメントが多くて有名なのを使っておくのが無難かと。

まとめ

オブジェクト指向は難しいと思います。未だに僕も勉強中だし、ちゃんと理解してないプログラマも多いし。 多分、理解するには人のコードを読んで、自分でコードを書いて、それを誰かにレビューしてもらうというのが早いと思うんだけど、とりあえず1つ1つ理解していくしかないと思うのでじっくり頑張ってください。

Comments:6

Nia Beranek 11-10-25 (Tue) 15:32

Hello, i think that i saw you visited my weblog so i came to “return the favor”.I’m trying to find things to improve my website!I suppose its ok to use some of your ideas!!

http://sg.mededu.miami.edu/phpBB3/memberlist.php?mode=viewprofile&u=36876 11-10-29 (Sat) 5:21

Hi there! I just wanted to ask if you ever have any problems with hackers? My last blog (wordpress) was hacked and I ended up losing several weeks of hard work due to no data backup. Do you have any solutions to prevent hackers?

Faustino Mayrant 11-10-30 (Sun) 14:12

With havin so much written content do you ever run into any issues of plagorism or copyright infringement? My blog has a lot of unique content I’ve either written myself or outsourced but it looks like a lot of it is popping it up all over the internet without my agreement. Do you know any techniques to help prevent content from being ripped off? I’d truly appreciate it. Thanks!

Ron Dubicki 11-10-31 (Mon) 3:41

Hello, this is a Magnificent read. I’ve undersood this sort of perspective, previous to this and you’re excellent. I actually like what you have articulated here, really like what you are saying and the way in which you say it. You make it enjoyable and you still care to keep it real. I can not wait to read more in the future from you. This is actually a terrific site. Keep up the great work.

Emmy Moening 11-10-31 (Mon) 14:57

Regards for this marvelous post, I am glad I found this web site on yahoo. Regards.

Edmund Schaar 11-10-31 (Mon) 22:21

Hi there I am so delighted I found your site, I really found you by error, while I was searching on Askjeeve for something else, Anyways I am here now and would just like to say thanks a lot for a remarkable post and a all round exciting blog (I also love the theme/design), I don’t have time to look over it all at the minute but I have bookmarked it and also added your RSS feeds, so when I have time I will be back to read a lot more, Please do keep up the great work.

Comment Form
Remember personal info

Trackbacks:2

Trackback URL for this entry
http://ukstudio.jp/2010/02/17/php/trackback/
Listed below are links to weblogs that reference
PHPについて適当に from UKSTUDIO
pingback from とっても! ちゅどん(雑記帳) » Blog Archive » UK STUDIO – PHPについて適当に 10-02-17 (Wed) 19:09

[...] UK STUDIO – PHPについて適当に [...]

pingback from ITキヲスク | 2010年2/14~2/21の週間ブックマーク 10-02-21 (Sun) 6:52

[...] UK STUDIO – PHPについて適当に [...]

Home > article > PHPについて適当に

Feeds
Meta
Others

Return to page top