- ベストアンサー
PHPでオブジェクト指向開発してますか?
実務でPHPでオブジェクト指向開発しているプログラマ(もしくは案件・企業)の割合ってどのくらいのものでしょうか? 当然、外部からPEAR等のクラスをひっぱってきたり、フレームワークを使用することはあると思いますが、設計レベルでオブジェクト指向開発をすることは、どのくらいの割合でありますでしょうか? つまり、interfaceやimplements、abstractといった単語を、仕事で使ったことがあるPHPプログラマはどのくらいいるのでしょうか? それとも、そもそもインターフェースや抽象クラス等は、ライブラリの開発者のためのものであって、一般のプログラマはむしろ使わないほうがいいのでしょうか? 周りに、PHPプログラマを本職でやってる人がいないので、ご意見を伺いたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> これに似た感じですね^^; これ、立場は違いますが、このSE(サポート的なでしたが)にも「現場の作業者」にもなったことが・・(笑) > PHPのプログラマがJavaのプログラマより給料が安いのもそのせいでしょうか。 Javaなどは組み込みもありますし、『要件を満たす能力を持ち合わせている人が少ない』という事も一因してお金上がってます。(今もまだそうだと思います) 逆にPHPはVBの時のように、爆発的に広がったせいか『とりあえず開発出来る』人が多いです。 需要供給の面から、Javaなどは金額を上げることができ、PHPは叩かれる、そんな図式が。 あと個人的には、『Web系は簡単』というイメージを持たれていそうな気もします。 > PHPで飯を食ってる人も、それほどPHP5のオブジェクト指向開発に精通していないということでしょうか? オブジェクト指向言語をやってきてたり、オブジェクト指向やPHPの動向にいち早く察知し、PHP5を早く取り入れてやってきている人にはそんな事は無いでしょうね。 今までにこんな事がありました。 ・仕事によって、せっかく資産があるのに使用しない。(仕事の関係かリーダー個人の意見か知らないけど、なぜか時代の流れに逆行^^;) ・クラスなどを作れるが、オブジェクト指向としてのその本質を理解しておらず、「えっとぉ・・・つ、作り直し?」っていうものが出来上がる。 作れるという先入観で失敗><;俺に火が降りかかってきた・・・;; PHPもバージョンが5になってからは「はじめての~」シリーズの書籍ですぐさまオブジェクト指向、クラスのお話が出てきてますから、徐々に徐々に、って感じでしょうね。 PHP5を使ったシステム作りだとしても、そこにはPHPよりむしろHTTPすら知らない新人がいたり、年齢を問わず仕事場の風習でその場その場の叩き上げで育ってきた柔軟性に欠ける人などもいたりします。(実際ありました。) もう、作業しながらHTTP&PHP勉強会ですよ(笑)パケットの中身見せたりサンプル作って見せたり・・。 > 抽象クラスやインターフェースは定義するメソッド名が分かりやすい、 > 分かりにくい、動詞を先にしろ、名詞を先にしろ等 これは『通常』、最初に規約を作ります。あえて『通常』と言っておきましょう。『異常』なものにも何度も出会ってますから^^; 規約あって周知しているにも関わらず読まずに好き勝手に作る輩もいますがね・・。 > 飲みの席「こんど、インタフェースから定義してみっか」といった話を > する程度なのか 話す人によってこういうのもありますねー。 欲を言い出したら止まらなくて、でも今更そうする事もままならず、壮大なお話になって終わります(笑) > ハテこんな大げさな機能、Webアプリケーションのどの部分で必要なんだ > ろう? 極論を言ってしまえば、必要ありません。ありませんが、時代の流れやプロジェクトの進め方で、使わなかった末路は散々なものになり得ます。 答えは、みんな(開発者もお客も)が幸せになる為に局所に、です(笑) ライブラリやフレームワーク、デザインパターンもそれを満たしてくれる1つの手法です。 基盤を作る時は、自分を含めたみんなが、自分のお客です。 そうそう、PHPでドキュメントからクラスの設計を行ったのは今までで1回しかありません。 リーダーは別ですが、私が主導でPHP作業をこなしたときしか。 (それだけPHPを知らない人にはPHPを軽視されているって事にもなりそう) 言葉として使ったのは「インターフェース」、「抽象」、「実装」、「継承」でしたが。 PHP専門でやってる企業ではないので、私の仕事上でのPHP暦は少なくて、PHP案件としては1/5回くらいの割合です多分。 最近は専ら自分の趣味でしか使ったり作ったりしてませんが・・・。
その他の回答 (3)
- wp_
- ベストアンサー率54% (132/242)
> > 実際利用する現場の開発者から文句でまくりです。 きたみりゅうじ 転職百景 http://tenshoku.mynavi.jp/eng/kitami/051.cfm これに似た感じですね^^; 報われない職場は早々に去るか異動したほうがよいかと思いますねぇ・・・ // 現実はそう甘くないものですけども >PHPのプログラマがJavaのプログラマより給料が安いのもそのせいでしょうか。 javaだからphpだから、ではなく単価が高くなりやすいのがjavaやc++なのだと思います。 組み込み系をphpで作るわけにはいきませんからね^^; web系ですと利益効果が表に出にくいので安く計上される傾向があります。 >ということは、PHPで飯を食ってる人も、それほどPHP5のオブジェクト指向開発に精通していないということでしょうか? そんなことはないです。 これからphp4が駆逐され、クラスなど使いこなせない人はどんどん淘汰されていくと思います。 // なんちゃってプログラマが減ると当方の仕事も減って助かるのですが。 >メソッド名が分かりやすい、分かりにくい、動詞を先にしろ、名詞を先にしろ等 通常の開発現場はキックオフのときにコーディング規約を「普通は作る」ので こういったことは起こりえないですね。 初心者SEとか経験浅いメンツばかりでやろうとすると 何も決めないままいきなりコード書き始めるから困りますが。 >それは、wp_さんがチームリーダだからというわけでなく(snip) 数多くの職場を経験して来ましたが、たまに「判らないのに居る」という人がいましたね。 リーダはやるのがダルいので当方は固辞しているのですが、こういう単語が判らない部下などは勉強しなおしか左遷、派遣社員などはそのままクビといったパターンが多いですね。 当方に権限がない状態でも「あいつ使えねぇやる気ねぇ」と進言することはままあります。 php、というかエンジニアとして飯を食うつもりであればこの辺の予備知識は学生のときに知っていろと言うのが私の持論です。 もちろん皆が皆そういうわけには行かないので、やる気があって継続心があれば逐次丁寧に教えたりしてます。 教わる方にしてみれば人と人との相性、つまり「運」だと思いますけどね。^^; 当方が教えた面子、教わった面子は現場から離れても繋がりを保つことが出来るので 互いを高めあう意味でも掲題の単語など会話で出たりしますね。 >ハテこんな大げさな機能、Webアプリケーションのどの部分で必要なんだろう?と思いました。 これから先はどの現場でも「デザインパターン」と言うのがキーワードになっていくと思います。 というかjavaの世界では3年前くらいから流行語じゃないかと思います。 // phpが遅すぎたといえます。javascriptの思想は更に遅いというかoopから離れて来ている phpでも既に様々なフレームワークがあり、ここ半年で関連の書籍も非常に増えました。 ここら辺が(深いところまで)理解できていない人は5年後10年後には生き残っていないと思います。 常に新しい手法、技術は模索されていますから。 >つまり、皆さん、実務でガンガン使ってらっしゃるのか、それとも、飲みの席 >「こんど、インタフェースから定義してみっか」といった話をする程度なのか知りたかったのです。 場合と話す面子によりけり、ですかね。 一年くらい一緒に仕事していると「次はこうしよう」とかの話題はナチュラルに出ます。 当方の場合は仕事ではなく、先述の「過去に一緒に仕事した仲間内」ですが^^; >当然、ある程度の経験者だと思いますので、それくらいできて当然かもしれませんね。 たまに頓珍漢なことをいう回答者も居ますけどね。 あまり人の事はいえませんが^^;
お礼
ご回答ありがとうございます。 四コマ漫画拝見させていただきました。 うーん、大変そうですね。 結論からいうと、自分が設計する立場にあるかどうかということなんですかね。 設計できない人間が書いても、なんちゃってになりそうですね。 私なんぞは、かなりなんちゃっての部類に入ると思います・・・。 ただ、オブジェクト指向の設計はかなり難しいイメージがあります。 DBの正規化とかは、すんなり分かるんですが。 とにかく、たとえ自分で設計できなくても、少なくとも先人たちが残した 遺産(コード)を読めるくらいにはなっておきたいと思います。 貴重な意見、ありがとうございました!
- wp_
- ベストアンサー率54% (132/242)
>interfaceやimplements、abstractといった単語を、(snip) ガンガン使ったりすることはありませんが、要件定義として上がってきたものを製作チームで話すときには使いますね。 コーディング規約の策定あたりか仕様の策定のフェーズでよく使います。 制作に入るとそもそも皆無言なのでこういった単語を聞くことはありませんね。^^; 飲みの席で話すネタにはなりませんし。 >ライブラリの開発者のためのものであって、 >一般のプログラマはむしろ使わないほうがいいのでしょうか? ライブラリを開発する一般のプログラマもいます。 というかどこまでが「一般」なのかの線引きができるのかどうかという思考にもなりますが、 最近の当方はMapleを使った開発で、似た画面で違う機能を持ってるものは既定クラスを一個作り派生させるようにしています。 またDAOやDTO、Validatorなどは既定クラスと共通関数郡クラスを一個作り機能ごとに逐次継承していますね。 ただ、クラスなどは内部機能を良く知っておかないと商用として使うには危なっかしいので 新人とかには普通書かせませんね。 javaなどの案件でも同様かと思います。
お礼
ご回答ありがとうございます。 利用しているのですね。それは、wp_さんがチームリーダだからというわけでなく、他の皆さんも、きちんと把握していらっしゃるのでしょうか? 私自身、interfaceは複数実装できて便利、などといったことは理解できましたが、ハテこんな大げさな機能、Webアプリケーションのどの部分で必要なんだろう?と思いました。 つまり、皆さん、実務でガンガン使ってらっしゃるのか、それとも、飲みの席「こんど、インタフェースから定義してみっか」といった話をする程度なのか知りたかったのです。 でも、ここで回答いただく方は、当然、ある程度の経験者だと思いますので、それくらいできて当然かもしれませんね。 ありがとうございました。 私も精進いたします。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
使ってます。 但し、後の開発が楽になる事が手に取るように分かり、その期間を 設けられるプログラムに限り、行っています。 (もしくはインターフェース、抽象クラス、流用可能なクラスが 予め存在する時) 私の周りでは、PHPっていうと、何だかお客様は『簡単に出来る』と お思いで、やたらと短納期、そのせい(だけではありませんが)でシステムの 設計がおざなり、アジャイルなわけでもない、場当たり的な力技での 開発が多いので、保守出来る範囲内でごりごり開発が多いです。 (こういうの欲しい、作ってよ、今すぐに -> 資料もないのに即開発 みたいな) 時間がなくて概要程度しか情報が降りてこない為、隅々まで『プログラムの設計』を 考えている余裕がありません。 そのうちこういう要望も有り得るな~と思える所だけ簡単に対応出来るように しておく程度です。 (予想出来る範囲内の最低限のものはクラス化しますが) 私の周りでは、そういった対応が可能な資産が一切ないせいなのも影響しています。 あとはちょっと時間かけても、開発者みんなが幸せになれるようなら フレームワークを継承して都合のいいようにしたりくらいです。 インターフェース、クラスは利用者の為のものです。 従って、出来上がって、こういう風に使って、と説明があって、 その設計が素晴らしいものであれば、開発者(つまりクラスの利用者)は みんな幸せになれます。 現場の実情も知らず独りよがりのクラスを作って、全然素晴らしくないと、 実際利用する現場の開発者から文句でまくりです。 (何でこういう作りにしちゃうの?こうすればいいじゃん、みたいな) 以後の生産性(カスタマイズ・保守など)や、その場の生産性が多少なりとも 上がらないのなら、クラス化する意味はないと感じます。 それはPHPに限った話ではないはずです。
お礼
ご回答ありがとうございます。 > 何だかお客様は『簡単に出来る』と > お思いで、やたらと短納期、 うーん。。。大変そうですね。PHPのプログラマがJavaのプログラマより給料が安いのもそのせいでしょうか。 > 私の周りでは、そういった対応が可能な資産が一切ないせいなのも影響しています。 ということは、PHPで飯を食ってる人も、それほどPHP5のオブジェクト指向開発に精通していないということでしょうか? > 実際利用する現場の開発者から文句でまくりです。 現場は大変そうですね。。。抽象クラスやインターフェースは定義するメソッド名が分かりやすい、分かりにくい、動詞を先にしろ、名詞を先にしろ等といったことで、ケンカになるかもしれませんね。
お礼
ご回答ありがとうございます。 現場の状況をを垣間見ることができました。 > あと個人的には、『Web系は簡単』というイメージを持たれていそうな気もします。 そうですね。僕もPHPを勉強しているといったら、Webアプリって簡単に作れそうだねという 答えが返ってきます。僕も僕で、「うん、そんなに難しくはないよ」と答えてしまいますが・・・。 > 欲を言い出したら止まらなくて、でも今更そうする事もままならず、壮大なお話になって終わります(笑) 話だけでも出来る仲間がいるだけでも幸せだと思いますよ。 > 極論を言ってしまえば、必要ありません。 率直な意見ありがとうございます。 私も、人に「必要か?」と聞かれれば、絶対に必要だ!とは答えてません。 私は、趣味の延長で勉強し始めて、正しい理解がないため、一種の乱用になりそうです。 例えば、PDOとSmartyのインスタンスをプロパティとして格納するMyClassを作って、 $obj->method()->method() みたいに呼び出すとか・・・。 でも、正しい使い方ではないんだろうなと薄々感じてたり・・・。 また、Singleton とかわざわざ作らなくても、「これインスタンス1つだけね!」って コメントに書くだけとか・・・。 ともかく、貴重な意見、ありがとうございました。 精進いたします!