トップページ⇒php
1001コメント362KB

PHPでオブジェクト指向プログラミング

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2005/04/17(日) 16:55:57ID:iM4mgYnJ
PHP5になって本格的なOOPができるようになったので
PHPによるOOPについて語りましょう。
0809nobodyさん2005/09/16(金) 05:42:34ID:???
>>808
func_get_argsとかfunc_num_argsで場合分けするしかない。
0810nobodyさん2005/09/16(金) 07:04:08ID:CbtypFEe
pearの本でてたのでかいました。
0811nobodyさん2005/09/16(金) 09:02:30ID:lrPJbkxR
>>801
どこらへんがデマ?

いや、マジで。
0812nobodyさん2005/09/16(金) 09:18:03ID:???
>>801
> このコードの意味がわからんのか。interfaceで多重継承している例だ
> class A extends B implements C, D, E, F, G{}

勘弁してよ。
C-Gからは、メソッドもプロパティも全く継承していないじゃん。できるわけがない。

C-Gは、インタフェースとしての受け口を決めたというだけで、実体としては空っぽ
なんだから。存在しないメソッドやプロパティを継承できるわけないさ。

なるほど、「インタフェースを継承している」という言い方はできなくもないが、
でも、それはここで話している『C++の多重継承』の『継承』じゃないと思うぞ?
08138122005/09/16(金) 09:24:08ID:???
で、過去のいきさつとしては・・・

C++は、仕様を拡張していく過程でよく考えないまま多重継承を盛り込んでしまって
(最初から多重継承があったわけじゃない)、後で「なんだこりゃ、こんなバカな仕様、
作り直して多重継承は廃止しろ!」という極論まで出て、そのときの大論争の中で、
「そうか、C++において多重継承が有用で、かつそれなしでは実現が困難だと思わ
れる事例というのは、実は単一継承とインタフェースの実装という形で綺麗に
まとめることができるんじゃないか。でも、一度規格に入れてしまったら、もう手遅れ
だよなぁ・・・ orz」と、いうような流れになったのが、10年くらい前のこと。

当時のC++開発者コミュニティの激論は、本にもなっているよね。

その反省のもとにJavaでは、継承とインタフェースを切り分けたわけじゃん。
そこら辺を踏まえたうえで、インタフェースも継承の一種だと主張するなら、そりゃ、
まことにごもっともなんだけど・・・ >>801 って、そこまで考えた上で言ってる?
0814nobodyさん2005/09/16(金) 09:29:22ID:???
つーか、PHPでinterface使って生産性あがるのか?
自己慢でinterface導入するなら迷惑だぞ。
0815nobodyさん2005/09/16(金) 09:44:36ID:???
生産性は落ちるかもしらんが、バグ防止と保守性は上がると思われ
0816nobodyさん2005/09/16(金) 11:13:11ID:???
PHPのinterfaceで強制できるのは、
実装すべきメソッド名とそのパラメータ数(arity)
でFA?
0817nobodyさん2005/09/16(金) 12:03:47ID:N1oYIrfo
ぶっちゃけオブジェクト指向は必要ないとおもわん?
てかPHPレベルでは設計とかもいらないだろ
俺はいきなり頭のなかにあるプログラムを書いていき
そして、修正し、うまくいかないときはその機能をすぱっと
きりすてる。デザイナーデザインしたやつも、わからないと
消すよ。ぶっちゃけ上司はそれでもわからんからOKでしょ。
0818nobodyさん2005/09/16(金) 12:23:35ID:???
>>815
具体的に。

>>816
PHPの言語仕様上だけの話ならFA。
0819nobodyさん2005/09/16(金) 14:17:10ID:???
Javaにおけるinterfaceの一番のメリットはポリモーフィズムでしょ。
PHPでは型宣言が無いためその恩恵をほとんど受け入れられない。

だから、例えば『PHPでGoFのデザインパターンを使ってみました』
なんてのは大抵のパターンにおいて意味がない。
0820nobodyさん2005/09/16(金) 14:18:29ID:???
>>817
何を作るか次第でしょう。
そりゃ単なる掲示板を作るだけなら要らない。
MVCでいうMの部分が複雑なロジックになるなら必要になってくる。
0821nobodyさん2005/09/16(金) 23:31:16ID:???
>>812
> >>801
> > このコードの意味がわからんのか。interfaceで多重継承している例だ
> > class A extends B implements C, D, E, F, G{}
>
> 勘弁してよ。
> C-Gからは、メソッドもプロパティも全く継承していないじゃん。できるわけがない。

おいおい、本当にinterfaceというものがどういうものかわかっているのか。
まったく信じられん。

Javaでは空のインターフェースは問題なくコンパイルできるぞ。
よくいわれるマーカーインターフェースという奴だ。
メソッドを一切持たないinterfaceのことをマーカーインターフェースと呼ぶのだ。
Javaのマーカーインターフェースの例としてはSerializableだ。
当該のオブジェクトがシリアライズ可能であることを示すためだけに使われる。


> C-Gは、インタフェースとしての受け口を決めたというだけで、実体としては空っぽ
> なんだから。存在しないメソッドやプロパティを継承できるわけないさ。

言っておくが、上記のコードでも問題なくプログラムは動くぞ。
JavaであってもPHP5であってもだ。エラーも警告も一切出ずにな。

interfaceにメソッドやフィールド(プロパティ)がないと継承(実装)が使えないと勘違いしているとは
もはや驚くとしか言いようがない。呆れるとまでいいたくなるくらいだ。
0822nobodyさん2005/09/17(土) 00:07:13ID:???
821はアホな子なのか、それともわざとか?
そんなことはぜんぜんいってないだろと
0823nobodyさん2005/09/17(土) 00:09:14ID:???
>>816
TypeHinting併用で引数の型をある程度限定できるけど・・・
0824nobodyさん2005/09/17(土) 00:47:08ID:???
>>821
さすがにここまで支離滅裂な長文を書いてくれると、苦笑いするしかないな・・・
あはははは・・・

> interfaceにメソッドやフィールド(プロパティ)がないと継承(実装)が使えない

っていう内容を含むレスはおまいが初めてだよ。
0825nobodyさん2005/09/17(土) 00:59:45ID:???
>>821
interfaceをimplementsするのは「インターフェースの継承」。
classをextendsするのは「インターフェースと実装の継承」。
812のいう「『C++の多重継承』の『継承』」は、インターフェースを除く「実装の継承」のこと。
だから「全く継承していないじゃん」になるんだが、理解できてないあたり821はC++やったことないだろ?
0826nobodyさん2005/09/17(土) 02:04:59ID:???
おそらく「継承とは何ぞや」という日本語のレベルで、意思の疎通がとれてない
んだろうけど・・・ なんだかなあ
0827nobodyさん2005/09/17(土) 02:38:28ID:???
継承の意味に関して意思の疎通がとれてないのは>>821だけだったようだが
0828nobodyさん2005/09/17(土) 02:39:50ID:???
821みたいな奴とは絶対リアルで付き合いたくないと
ひしひしと思った初秋…
0829nobodyさん2005/09/17(土) 02:42:13ID:???
>>821
いっぱい釣れたネ
0830nobodyさん2005/09/17(土) 14:40:24ID:???
確実にいえることは、>>783が嘆いているような本が実在していたばかりか、
しかも嘆かわしいことに、その本の犠牲者も実在していたということだな。

>>828
821は、たぶん、職場で浮いている理由が自覚できないまま、「なぜ自分は
部下や同僚や上司からバカにされているんだろう」と、いつも自分が不当に
扱われていることに悩んでいるのかも知れない。
0831nobodyさん2005/09/17(土) 15:25:07ID:???
でもあきらかに>>812は勘違いしているよ。

↓この一文が勘違いしている証拠。

> なんだから。存在しないメソッドやプロパティを継承できるわけないさ。
0832nobodyさん2005/09/17(土) 15:31:27ID:???
>>825
おまえさ
『インターフェース継承』って言葉使わないの
それを略して継承っていうこともあるんだよ。
その程度のことで揚げ足とっておけば自分の無知を隠せるとでも
思ってるのかねインターフェース不要派は。

ようは、PHP5でクラスだけで実装多重継承ができるかどうかって話だろ。
>>812はできるんだと思い込んでいるらしいが>>799でできないとすでに証明されている。
それにもかかわらず>>812はこんな変なことを言って誤魔化している。

> C-Gは、インタフェースとしての受け口を決めたというだけで、実体としては空っぽ
> なんだから。存在しないメソッドやプロパティを継承できるわけないさ。


むしろお前らのほうがアホだろ。
0833nobodyさん2005/09/17(土) 15:45:30ID:???
classのextends = 実装継承
interfaceのimplements = インターフェース継承

これらを総称して『継承』と定義しよう


そうすればこれまでの話はすべてかみ合う。

●class
実装多重継承できない。実装単一継承のみできる。
abstractであるでないにかかわらずメソッドのオーバーライド可能。
空のクラスも継承できる。
スーパークラスにabstractになっているメソッドがある場合は必ずオーバーライドしなければならない。
●interface
インターフェース多重継承が可能、実装多重継承できない。
インターフェース実装方法はimplementsの後にインターフェース名をカンマで区切って列挙する。
空のインターフェースでも実装できる。それをマーカーインターフェースと呼ぶ。
abstractになっているメソッドをオーバーライド可能。
メソッドに実装を記述することはできない。定義のみ。
フィールドはすべてpublic static final
クラスがメソッドをもつインターフェースを実装した場合はそのクラスにかならず
そのメソッドをオーバーライドしなければならない。
0834nobodyさん2005/09/17(土) 15:47:05ID:???
>>812は
インターフェースC,D,E,F,Gに少なくとも
何かメソッド、フィールドが無ければ
class A extends B implements C, D, E, F, G{}
と書いてもエラーになると勘違いしている可能性があるね。
0835nobodyさん2005/09/17(土) 15:48:48ID:???
そして>>775は
class A extends B, C{}
という実装多重継承をする記法をPHP5で
行ってもエラーにならないと勘違いしている可能性が非常に高い。
0836nobodyさん2005/09/17(土) 15:51:23ID:???
予想としては

interface不要派の主張は
「C++のようにPHPでも実装多重継承を許すべきだ」
ということ?
0837nobodyさん2005/09/17(土) 15:57:04ID:LyIaKOuC
言語の違いによって用語の定義が異なるからね。

ある言語では継承のことを拡張とよんだり汎化と呼んだり。
メソッドのことをメンバ関数、操作
フィールドのことをメンバ変数、プロパティ、属性

スーパークラスのことを親クラス、基本クラス
サブクラスのことを子クラス、拡張クラス
抽象メソッドのことを純粋仮想関数

とね。このあたりの違いが喧嘩の原因になったんだと思われ。
0838nobodyさん2005/09/17(土) 17:12:22ID:???
ヲタどもがくだらない宗教論争をしてるスレはここでつか?
0839nobodyさん2005/09/17(土) 17:12:53ID:???
ここでつよ。オセロでもする?
0840nobodyさん2005/09/17(土) 17:37:19ID:???
Javaの継承は拡張って意味じゃん。extendsって書くのだもの。
継承はis-a関係が成り立ってないと駄目。
でもJavaはそれを保証する事が言語仕様上では困難。
0841nobodyさん2005/09/17(土) 17:38:50ID:???
だからinterfaceを使う。
これで同じインターフェースを実装している
実装クラス群を同じように扱える。
ところがPHPでは型宣言が無いため
関係ないたまたま同一メソッドを持ったクラスも同じように扱えてしまう
0842nobodyさん2005/09/17(土) 17:39:47ID:???
故にJavaでinterfaceや役に立つが
PHPでは役に立たないということが完全に証明できた。
0843nobodyさん2005/09/17(土) 17:41:18ID:???
> PHPでは役に立たないということが完全に証明できた。

デマですね。
0844nobodyさん2005/09/17(土) 17:43:52ID:???
>>840

> 継承はis-a関係が成り立ってないと駄目。
> でもJavaはそれを保証する事が言語仕様上では困難。
(゚Д゚)ハァ? 意味ワカンネ。
何で困難になるんだ?
is-a関係を成り立たせるために継承があるんじゃん。
そういうことはJavaでもPHP5でも変わらないんだけど。
0845nobodyさん2005/09/17(土) 17:45:06ID:???
>>841
> だからinterfaceを使う。
> これで同じインターフェースを実装している
> 実装クラス群を同じように扱える。
> ところがPHPでは型宣言が無いため
> 関係ないたまたま同一メソッドを持ったクラスも同じように扱えてしまう
(゚Д゚)ハァ?

>>842
> 故にJavaでinterfaceや役に立つが
> PHPでは役に立たないということが完全に証明できた。
(゚Д゚)ハァ?
0846nobodyさん2005/09/17(土) 17:52:20ID:???
>844
継承する側が注意を払わないと成り立たないという意味。
0847nobodyさん2005/09/17(土) 17:59:29ID:???
さぁ、そろそろ無限ループから抜け出す時間ですよ
0848nobodyさん2005/09/17(土) 18:01:26ID:???
>>842
一応こういうことが出来るんだけどね
is_a($class, 'IInterface');
0849nobodyさん2005/09/17(土) 18:02:54ID:???
そもそもinterfaceのメリットを主張してみろよw
0850nobodyさん2005/09/17(土) 18:19:55ID:???
>>849
Object interfaces allow you to create code which specifies which methods a class must implement, without having to define how these methods are handled.
クライアント(呼びだす側)が気にすることはない
0851nobodyさん2005/09/17(土) 19:16:15ID:???
>>835
なんでそういう解釈になるかなあ。
interfaceによる実装と多重継承を混同するなっつってんだよ。

>>836
> 「C++のようにPHPでも実装多重継承を許すべきだ」 

なんでやねん。
というか誰もinterfaceが不要なんて言ってないような気がするが。
0852nobodyさん2005/09/17(土) 19:53:28ID:???
もうキチガイはほっとけよ
あまりに無駄な議論だ
0853nobodyさん2005/09/17(土) 20:16:52ID:???
>>849
Javaの香りをPHPに持ち込むことができて、Java厨がご満悦できる。
0854nobodyさん2005/09/17(土) 20:18:58ID:???
>>836
> 「C++のようにPHPでも実装多重継承を許すべきだ」

そんな主張をしている発言はひとつも存在しないんだが・・・

どういうわけか、存在しない架空の脳内発言を勝手に作っておいて、
その架空の主張に反論しようとして、大騒ぎしている人がいるね。

スレが混乱している元凶は、それだ。
0855nobodyさん2005/09/17(土) 20:20:38ID:???
>>834
ないよ。
0856nobodyさん2005/09/17(土) 20:31:04ID:???
すくなくとも、
「JavaのinterfaceはC++の多重継承の代用品だと書いている本は、インチキだ」
という点については、「C++の多重継承」と明記しているんだから、正しいと思うんだが。

それ以外の、どうやら各人ごとに好き勝手に定義している語義のあいまいであるほうの
『多重継承』については、誰が何を言っているのやらワケが分からんし、これ以上、
続ける価値はあるまい。そろそろお開きにしてくれ。

それにしても、存在しない主張を脳内に作って反論するのはいかがなものか。

いや、プログラマにありがちな「問題ない症候群(No-Problem Syndorome:NPS)」の
いち形態なんで、現場でしょっちゅう見聞きする病気ではあるんだが。悪意はないはず。

解くべき問題を把握ことなく、「こんなの分かりきった問題だ」と思い込んで、的外れな
コードや仕様書をいきなり書き始めて後で地獄に落ちるタイプだ。
0857nobodyさん2005/09/17(土) 21:27:32ID:???
いきなりマーカーインターフェースとか言い出すやつは釣りだろ
レベル低すぎるし
0858nobodyさん2005/09/17(土) 21:50:06ID:PCMxsCgE
>>832
> その程度のことで揚げ足とっておけば自分の無知を隠せるとでも
> 思ってるのかねインターフェース不要派は。

825は、インタフェース不要派じゃないぜ。脳内妄想もほどほどに。
0859nobodyさん2005/09/17(土) 21:54:30ID:???
>>856
誤字脱字注意すべし。Syndromeね

interfaceはともかく、try-catchがあるんだからfinallyが欲しい
08608562005/09/17(土) 22:00:09ID:???
>>859
おっと失礼。どこにでも母音を入れてしまう「じゃぱにいずイングリッシュ」でした。
「把握ことなく」も変だ。他人に突っ込みを入れておきながら、自分がこれとは、
お恥ずかしい限り。 orz
0861nobodyさん2005/09/18(日) 18:29:03ID:???
結局PHPのinterfaceは、公布済みインターフェースを宣言するような感じのもので、
ライブラリを利用するのコードを書く側へのドキュメンテーションに使うんだろうな。
0862nobodyさん2005/09/18(日) 18:43:30ID:???
正解。
0863nobodyさん2005/09/18(日) 20:27:34ID:???
久し振りに見に来たけど
この話題、まだやってたのか…。
0864nobodyさん2005/09/19(月) 01:27:07ID:???
>>863
このスレの特徴としては、言い合いになったときに話の収拾をつけることを忘れて自己主張する香具師が多いこと。
これじゃまとまるものもまとまらんので、じっとスルーしておくしかないと思われ。
0865nobodyさん2005/09/19(月) 04:46:51ID:miiafsuD
DBの予想外のエラーって
どこで処理してますか?
俺は
DBでエラーが起きる=イレギュラーで致命的な事態が起こっているから
DBアクセスクラスの中から直接エラーページにリダイレクト
にしてるんだけど。
0866nobodyさん2005/09/19(月) 05:04:21ID:???
>>865
Exceptionを投げてcatchしたところで処理してる。
0867nobodyさん2005/09/19(月) 21:50:22ID:???
>>846
> >844
> 継承する側が注意を払わないと成り立たないという意味。
んなことPHP5でも同じことだろが。
何いっとんだおめえ。頭悪すぎ
0868nobodyさん2005/09/19(月) 22:00:31ID:???
>>851
> >>836
> > 「C++のようにPHPでも実装多重継承を許すべきだ」
>
> なんでやねん。
> というか誰もinterfaceが不要なんて言ってないような気がするが。

そんな誤魔化しや嘘が通用するとでも思っておるのかなw
PHPではinterfaceが不要と言っているPHP厨すぐそこにいるぞw


ほれ
>>842, >>814, >>753, >>752, >>747, >>727

他の香具師はうまいこといって不要じゃないとかいっているが
interfaceの存在意義がなんだとか言ってる奴がまだどこかにあるぞw
0869nobodyさん2005/09/19(月) 22:02:37ID:???
もう単なる言質取りになってるじゃねーか
意味ねーことやめれ。誰も得してないぞ。
0870nobodyさん2005/09/19(月) 22:13:13ID:???
使いたい人が使って、
使いたくない人は使わない、
では駄目でしょうか?
0871nobodyさん2005/09/19(月) 22:28:29ID:???
駄目だろ。PHPの今後の未来のために結論を出すことが不可欠。
0872nobodyさん2005/09/19(月) 22:29:56ID:???
>>870
俺もそう思うね。
JavaはWebアプリに特化した言語じゃないし、
PHPは大規模Webアプリに向いてない。
PHPでinterfaceを使うような開発状況(?)は限られてると思うし、
多分要らないって言う人は小規模のWebアプリ作成者、
一人で作ってる人とかだと思う。
多人数で開発行ったり、他人にメンテさせたいとか
の場合にinterfaceは効果発揮するんじゃないかな。
と素人の俺がよくわからないまま発言してみる。
0873nobodyさん2005/09/19(月) 22:47:25ID:???
>>849
今までにいくつかすでに語られているが、
●ひとつのオブジェクトに複数の型を持たせることができる。
●『具象メソッドをもたない抽象クラス』を宣言できる。
●そしてさらにそのクラス多重継承できる。
●メソッドを持たない、あることを示すマーカーインターフェースを定義できる。
●定数定義専用クラスとして使うことができる。
●デザインパターンのいくつかは、interfaceが無ければ実現できないものがある。
例 : Prototypeパターン(代替手段はある),
   Mediatorパターン, Strategyパターン, Observerパターン, Stateパターン,
   Proxyパターン, Commandパターン
そのほかにもメリットはまだまだあるが語りきれない。
0874nobodyさん2005/09/19(月) 22:47:43ID:???

それから、クラスにする必要が無いものはインターフェースにしておくと良いときがよくある。
インターフェースにしておくことであるクラスAにこのクラスThisClassを実装したがったが
すでに他にクラスSuperAによって継承されている。そんなときクラスThisClassではなく
インターフェースThisInterfaceに切り替えることで、インターフェースThisInterfaceを
あるクラスAに実装することでができる。

class A extends SuperA implements ThisInterface {}

デザインパターンにはそういったサンプルがいくつもある。

逆に、インターフェースではなく抽象クラスのほうが良い場合もある。
抽象クラスにしておけば、不要なインターフェースどうしの多重継承を防ぐことができる。
注 : インターフェースどうしは、『多重継承』ができる。
interface A{}
interface SubA1 extends A{}
interface SubA2 extends A{}
interface SubSubA extends SubA1, SuA2{}
こんなダイヤモンド継承じみたこともできる。(これ自体には特に意味は無いが)

interfaceを使うメリットをもっと詳しくしりたければデザインパターンについて勉強して来い。
0875nobodyさん2005/09/19(月) 22:50:18ID:???
>>857
マーカーインターフェースの話を持ち出すことがレベル低いのか。
なぜレベルが低いのかね。
それが説明できなきゃお前こそが根拠もなくただ主観的に判断しているだけの
レベルの低い人間だと見なされるぞ。
0876nobodyさん2005/09/19(月) 22:55:50ID:???
>>861
はて、それだけに使うものかな。

インターフェースXを定義したとして
interface X{}
あるクラスYがインターフェースXを実装したとする。
class Y implements X{}
そしてあるクラスAで
イカのようにインターフェースを呼び出す
class A {
 public function do(){
  $x = new Y();
 }
}

このオブジェクト$xをどこで使うか?

このオブジェクトを呼び出すメソッド作る。
そこではPHP5から可能になってメソッド引数の型を
限定できる機能。
 public doMethod(X $x){
 }
これに使うことができる。
class A {
 public function do(){
  $x = new Y();
  doMethod($x);
 }
 private doMethod(X $x){
 }
}
こんな感じでだ。これもinterfaceを使うメリットのひとつ。
0877nobodyさん2005/09/19(月) 23:00:46ID:???
>>873
その interface が無いと実現できないデザパタって…本気で言ってるの?
0878nobodyさん2005/09/19(月) 23:07:58ID:???
>>876
ついにそれを主張したか。
まあ、それ用いる箇所ではメリットになるわな。

でも結局その方向だと現在の型宣言を省略できるPHPは糞で
全てJavaの仕様が良いんだって事になってしまうと思うんだけどなあ。
0879nobodyさん2005/09/19(月) 23:08:00ID:???
それだったらinterfaceを使わずabstract classで十分だろうって?
そう思うなら、このケースではどうかな?

抽象クラス Cを定義したとして
abstract class C{
 private $string;
 public final function getString(){
  return $this->string;
 }
 public final function setString($string){
  $this->string = $string;
 }
 abstract protected function doSomething();
}
以下のようにクラスXを定義した。
class X{}
このクラスXを、
抽象クラスCを継承したクラスYに継承させようとした。
ところがPHP5では多重継承できない。以下のコードはエラーになる。
class Y extends C, X{
 //(ry
}

そこでクラスXをインターフェースXに置き換えた。
interface X{}

class Y extends C implements X {
(ry
}

こんな感じになると嫌でもinterfaceを使わざるをえなくなる。
0880nobodyさん2005/09/19(月) 23:12:35ID:???
>>878
まて、PHPにはget_class()というクラスがある。
型が曖昧とはいえ、Javaのようにスマートにはいかないものの、
型を厳しくする手段はある。
0881nobodyさん2005/09/19(月) 23:14:34ID:???
>>877
interfaceがなくても実現できる方法はあるが
それでは柔軟性がない。
とくに>>879のような状態に陥ったら
何が何でもinterfaceを使わざるをえなくなる。
デザインパターンを上手に使うならinterfaceやastract classを上手に使い分けることだ。
0882nobodyさん2005/09/19(月) 23:16:51ID:???
>>865
PEAR::DBの真似じゃいけないの?
0883nobodyさん2005/09/19(月) 23:24:16ID:???
Perlは多重継承できますけどPHPはできないんですか?
しょっぼ!
0884nobodyさん2005/09/19(月) 23:32:37ID:???
アホが来たw
0885nobodyさん2005/09/19(月) 23:34:52ID:???
ごくろうさま
0886nobodyさん2005/09/20(火) 01:28:47ID:???
>>879
「多重継承できないからinterface必要」論に逆戻りかよw
まったく、多重継承にこだわる奴から、Javaでのinterfaceの利点だけつらつら並べる奴から、てめえがinterface使わないからって不要だとか言う奴から。
お前ら適材適所という言葉を知らんのか。
オレは>>870に同意。

PHPはアドホックをひたすら重視した使い捨て言語から始まり、使えそうなものはガンガン取り込み、終いにはOO導入して徐々に規模の大きなWebアプリにも対応できるようになってきた。
良く言えば柔軟性が増してきたし、悪く言えば統一性・方向性に欠けるため扱い辛い。

良くも悪くも多くの場面でPHPは使われてんだから、「必要」か「不要」かの極論をあえて押し付けようとすれば、それはもはや説得ではなくただの言いくるめだろ。
使うべき時に使えばいいし、いらないなら使わなければいい。

必要派の奴らだって世のPHPのごく平均的な規模(測るのは容易ではないかもしれないが)にinterfaceがどうしても必要とは言わないだろうし、不要派の奴らだってinterfaceがあることが害になるとは言わないだろ。

とりあえずちょっとはお互い歩み寄れ。
長文・チラシ裏失礼〜 ノシ
0887nobodyさん2005/09/20(火) 02:08:35ID:???
結論は>>870だとしても
Javaでのinterfaceの利点が動的型付け言語のPHPでも全て通用するのか?
をきちんと考えるのはPHPにおけるinterfaceの使い道を考える上でも重要でR。
0888nobodyさん2005/09/20(火) 02:59:39ID:???
>>879
Xいらないじゃん
0889nobodyさん2005/09/20(火) 03:54:32ID:???
PHPにインタフェースが必要かどうかはわかんないけど、
このスレの参加者の中に、に適切なインタフェースが欠けている人が
いることだけは間違いないな。










ヨタ話、スマソ。
0890nobodyさん2005/09/20(火) 17:09:22ID:???
>>888
とりあえずおまえはデザインパターンの勉強を(ry
で、ついでにマーカーインターフェースについてぐぐれ
0891nobodyさん2005/09/20(火) 17:57:00ID:???
>>890
Xをマーカーにするなら>>861の通りでしょ
>こんな感じになると嫌でもinterfaceを使わざるをえなくなる。
これだってコメントアノテーションで代替できないこともない

型を縛りたいときはタイプヒンティング、is_a()が必須
interface不要とは言わない(むしろ歓迎)が、用法・用量・用途を良く考えないと
不要なインターフェース、不要な継承を量産することになるぞ
0892nobodyさん2005/09/20(火) 19:59:52ID:???
組み込みオブジェクト指向への進化を期待していたPHP6だが
そういう変化はないみたいだな(*゚д゚) 、ペッ
0893nobodyさん2005/09/20(火) 20:09:48ID:???
PHP6で新しいことってUnicodeぐらいでしょ?
Javaで当たり前のことをようやく真似するだけ。
0894nobodyさん2005/09/20(火) 20:33:07ID:???
ネームスペースの機能が出来るのは大きいんじゃないの。
0895nobodyさん2005/09/20(火) 20:45:05ID:???
やっぱJavaの追随だな。
0896nobodyさん2005/09/20(火) 21:08:22ID:???
Unicodとネームスペースって
バージョン変えるほどかとも思うけどなぁ
ちょっと期待しすぎたか
0897nobodyさん2005/09/20(火) 21:26:57ID:???
どうしてUnicodeサポートやネームスペースがJavaの追従になるのやら
次のPHPに求める動的言語っぽい機能ってなんだ?動的なメソッド追加とかクロージャとか?
そうすると今度はRubyの猿真似とか言われそうだけどな

他の言語のいいとこ取りでいいと思うんだけどな
C#やDelphiのプロパティとか言語仕様で欲しい
0898nobodyさん2005/09/20(火) 21:27:17ID:???
相変わらず何をしたいのかが見えないよな。
Javaの真似するだけならもうある意味完成だろ。
動的言語であるなどの手軽さを活かしていろいろ考えてほしいのに
PHPの中の人たちは誰もそれをしない。
0899nobodyさん2005/09/20(火) 21:56:26ID:???
Javaに似せていくっていうのは、中小規模Webプログラミングというニッチな分野で
積極的にシェアをとっていくための立派なマーケティング戦略なんじゃないか?
と思ったがやっぱ天然かも知れん。
0900nobodyさん2005/09/20(火) 22:02:42ID:???

   ( ´A` ;)       * ('A`)>
 /(   )\   →   <( )  *
   | |          | >

   before         after(でもモテない)
0901nobodyさん2005/09/20(火) 22:56:16ID:???
ユニコードとネームスペースは、Javaとは関係ないだろ。
というか、ネームスペースはPHP3あたりですでに実装して欲しかった機能だよ。
0902nobodyさん2005/09/21(水) 14:21:59ID:???
>>871
こんなところで、日本語でべらべら語って、どんな結論を出しても
PHP6やPHP7に盛り込まれる可能性はゼロだよ。

議論ゴッコをして遊んでいるだけ。
0903nobodyさん2005/09/21(水) 14:24:53ID:???
>>893
Unicode採用をJavaのまねというのは、さすがにズレていないか?
0904nobodyさん2005/09/21(水) 16:17:21ID:???
namespaceはオブジェクト指向関係なしに名前汚染を予防できるからぜひ欲しい。
いっぺんPHP5が出る直前でなんか問題があってZeevが却下したんだっけ。
で、今のHEADへのパッチはそれに対するアプローチが施されているとか。

MLヲチしてるとZendの人たちはPHPらしさを完全に見失ってる感じがするね。
Python 3.0(これも基本の文字列型がUnicode対応になる)が面白そうな感じ。
0905nobodyさん2005/09/21(水) 17:32:02ID:???
Zendの人たちはビジネスありき(エンタープライズ狙い)で考えちゃうから、
何をやるにしてもJavaやSun、IBMの後追いなんだよな。
0906nobodyさん2005/09/21(水) 20:31:51ID:???
PHP6はVMにParrotを採用するらしいよ。
0907nobodyさん2005/09/22(木) 05:34:04ID:???
>>905
まぁ、Perlみたいに開発資金不足になっちゃうよりはいいと思うよ。
0908nobodyさん2005/09/26(月) 01:24:35ID:???
>>906
Parrotか。
Perl6のように大変化される...

なんてことはないか。
# 誰かhaskelでphp6書いて
レス数が900を超えています。1000を超えると表示できなくなるよ。