PHPでオブジェクト指向プログラミング
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2005/04/17(日) 16:55:57ID:iM4mgYnJPHPによるOOPについて語りましょう。
0002nobodyさん
2005/04/17(日) 17:11:00ID:E38Tygfy0003nobodyさん
2005/04/17(日) 17:27:33ID:???http://pc8.2ch.net/test/read.cgi/php/1113715166/
0004nobodyさん
2005/04/17(日) 20:33:17ID:???あまり本格的にOOPしてる人は少数なんだろうな。
00061
2005/04/20(水) 12:51:40ID:???(オブジェクト指向)をする為の情報交換スレにしたいと
思っております。
0007nobodyさん
2005/04/20(水) 13:06:00ID:???個人的にはinterfaceなんかよりも欲しい機能だったのだが。
class Net_Foo_Bar_Baz {} みたいなのとはオサラバしたいのに。
0008nobodyさん
2005/04/20(水) 17:27:02ID:???0009nobodyさん
2005/04/20(水) 20:32:55ID:???0012nobodyさん
2005/04/21(木) 22:47:58ID:???0013nobodyさん
2005/04/21(木) 22:48:41ID:???0014nobodyさん
2005/04/21(木) 22:52:08ID:???0015nobodyさん
2005/04/21(木) 23:01:51ID:???PHP5がこなれるにはまだ時間がかかるでしょ。
でも、OOPと呼ぶには中途半端な仕様なので、
数年後にはPHP6でまたがらりと変わってやり直し、
ってことになるような悪寒。
PHP4はこれからも結構長く使われるのではないかな。
できればPHP5よりPHP4のメンテナンスに力をいれて欲しい。
0017nobodyさん
2005/04/22(金) 22:52:05ID:???なんつーか、4.3の時なんて、マイナーバージョンアップなのに
さっぱり動かなくなったりとか、ひどかったからねぇ。
その前はmb_stringの問題で回避しながら書いてたら、
いきなり使えるようになったりとかさ。
ともかく、他の言語では考えなくて良い無駄な労力が多くて疲れる。
困ってないと言うことは、それだけ何もやってないと言うことだから、
別に君はPHPに拘る必要はないと思うよ。
PHPの動き始めてからの面倒くささは、作った奴なら一度は感じることだと思うし。
セキュリティもバージョンアップも無視して、同じバージョンを使い続ける覚悟でもあれば別だろうが。
0019nobodyさん
2005/04/23(土) 19:05:29ID:???0020nobodyさん
2005/04/23(土) 22:23:31ID:???0022nobodyさん
2005/04/24(日) 12:26:22ID:???らしいよ。理由は知らないけど
0023nobodyさん
2005/04/25(月) 09:56:20ID:???その人自身に問題があることが多い
0024nobodyさん
2005/04/25(月) 17:39:07ID:???どっちもイケるのを目指してるんだったら考え直すか二分化するかした方がいいかもねぇ
0025nobodyさん
2005/04/25(月) 19:44:01ID:???Java みたいに面倒ではなく、
デザパタができる程度には OO 化で丁度いいと思うよ。
0026nobodyさん
2005/04/29(金) 18:02:00ID:BB1WOA5x0027nobodyさん
2005/04/29(金) 23:24:02ID:???PHP-Full → Java
0028nobodyさん
2005/04/30(土) 00:14:21ID:???0029nobodyさん
2005/04/30(土) 13:25:16ID:???PHP5専用のOSSプロジェクトも幾つか見かけるようになってきたけど、
やたらと「Javaの〜の移植」ってのを目にするし。
PHP5になって、OO機能が充実して、出来るようになったことが
「Javaから移植しやすくなりましたよ」ってだけじゃ悲しすぎるだろ。
それは言語の存在意義を否定することじゃないのか。
0030nobodyさん
2005/04/30(土) 13:44:00ID:???0031nobodyさん
2005/04/30(土) 13:55:49ID:???PHPの存在意義って... なんだろう?
0032nobodyさん
2005/04/30(土) 17:41:55ID:???0033nobodyさん
2005/04/30(土) 23:37:33ID:???0034nobodyさん
2005/05/01(日) 00:33:45ID:???0035nobodyさん
2005/05/01(日) 00:47:43ID:???0036nobodyさん
2005/05/01(日) 14:49:03ID:???Java から移行している、ってのもあるんだと思うよ。
0038nobodyさん
2005/05/08(日) 13:26:44ID:???それはPHPの問題なのか?
単順に作りが悪いだけだったんじゃないのか?
PHPでは問題が起きて、Javaじゃ問題が無いって、例えばどんな問題なの?
0039nobodyさん
2005/05/08(日) 18:24:48ID:???0041nobodyさん
2005/05/08(日) 23:26:03ID:???メンテナンス性が悪くなるように感じる
一方 PHP でもメンテナンス性の高い書き方はできるのだが
そうすると上述の利点が、全部ではないにしろ、相当に失われるように思える
もちろん両方を少しずつ犠牲にして中間を取ることもできるのだが
それを中庸と見るか中途半端と見るかはまた意見のわかれるところ
でまあ、あくまで私見だが、pear とかのまじめな開発者は別として
これまで世の中で「PHP書けます」と自称していた人の大半は
メンテナンス性を犠牲にして簡単さを重視していたような気がするよ
それはPHP自身ではなくそれを使う人間の側の問題なんだろうとは思うけど
0042nobodyさん
2005/05/09(月) 00:46:41ID:???概ね同意かな。
しかし「簡単に書ける=メンテナンス性が悪くなる」は
必ずしも成り立たないのだから、簡単に書けることがウリのPHPには
「簡単に書けて、かつメンテナンス性も(あまり)悪くならない」方向を追求して欲しかった。
が、実際にPHP5で強化されたのは、専ら
「メンテナンス性は向上するが、簡単ではない(かも知れない)」類の機能だったわけで、
結局簡単に書く=メンテナンス性悪の図式はそのまんまなんだよな。
0043nobodyさん
2005/05/12(木) 17:19:20ID:???PHP5のように簡単に書けるけど、Java風のしっかりとしたOOPも
できる見たいな方が好みかな。
0044nobodyさん
2005/05/12(木) 19:07:47ID:???0045nobodyさん
2005/05/13(金) 01:52:42ID:vNR8miqZなんかJAVAでパフォーマンスが悪すぎたのでPHPに切り替えることになったらしい。
JAVAが悪いというよりは、作りが悪いだけだと思いますが。
コーディング規約や使用するライブラリ類を規定して
なおかつソースレビューとかすればPHPでも品質はそれほどばらつかないと思うよ。
それからメンテナンスし易いような作りにしても、全然難しくならないので、
簡単に書けるというPHPの利点は全く失われないと思う。
0050nobodyさん
2005/05/13(金) 11:16:11ID:???あれ、どうにかできないかなぁ。
せっかく、OSはLinuxとかなのに、Javaである程度のパフォーマンスを得る為に、
メモリを1G〜2Gも積むはめになる。
同様の機能のWebアプリを自宅でPHPで作ったら、メモリ256MBでも
Javaで作ったやつよりも快適だし。
0051nobodyさん
2005/05/13(金) 12:12:48ID:wwvtr3ys0053nobodyさん
2005/05/13(金) 12:50:07ID:iSYcHFArぷぇぷwぷぷはぷぷwぷwっうぇっうぇぷぷぷぷっうぇ
ぷwぷぷwぷぷwぷwぷwぷぇぷwぷみぷぷwぷw
ぷぇぷwぷぷぷぷぷはぷぷwぷぷぇぷwぷおkぷぷぷ
0054nobodyさん
2005/05/13(金) 15:44:25ID:???正規表現とかはPHPの方が早かったけど
まあ、スレ違い
0056nobodyさん
2005/05/13(金) 21:27:11ID:???速度気にする奴に限ってプロファイリングすらやってないし
0058nobodyさん
2005/05/14(土) 01:16:33ID:???普通にやれば、Javaの方が圧倒的に速いよ。
多分>>45のケースは彼自信の言うと通り作り方か実行環境が悪いだけだと思う。
それにしてもあれだな。PHP5はAmazonECSの為に生まれたようなもんだな。
SimpleXMLの高速XML処理にSQLiteの組み合わせ。
アソシエイトの収入がとうとうお小遣いのレベルを突破しましたよ
0059nobodyさん
2005/05/14(土) 01:46:19ID:vDWMPOXAコンパイルするからJavaの方が速いというのは少し違うと思う。
PHPは単純なインタプリタ言語ではなくて、コンパイルされてから実行されるよ。
ただ毎回コンパイルされるのでそのままでは確かに遅い。
でも、通常はそのままで運用する事はなくて、
アクセラレータ等を使ってコンパイル結果をキャッシュして高速化を図るよね。
言語自体の速度はいろいろなツール等でカバーできたりするので、
そこは実はどうでもいい気がする(そこまで差がつかない)。
それよりサーバ構成や負荷分散方法などの実行環境次第でパフォーマンスが決まるんじゃないかな。
Javaだから速いなんて一概に言えないはず。
0060nobodyさん
2005/05/14(土) 02:00:47ID:ViMLg4Ypおkwwwうはっwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwうぇwww
おkwwwwwwwwwおkwwww
www
うはっwww
0061nobodyさん
2005/05/14(土) 02:19:14ID:UV4uYPzcwwwwwwwwwwwwうはっwwwうはっwww
wwwwwwwwwwwwおkwwwっうぇうぇwww
っうぇっうぇwwwwwwwwwwwwwwwwww
0062nobodyさん
2005/05/14(土) 02:21:38ID:???実際計った?
http://www.thinkit.co.jp/free/compare/2/2/1.html
ここ見て俺もやってみたけど、複雑な計算が絡むほど差が激しくなる。
もちろんJavaだからなんでも速いとは言わないが、やりたいことが増えるほど
PHPは不利。
006359
2005/05/14(土) 03:10:28ID:???実際に全く同じシステムをPHPとJavaで構成して測った事はない。
客の予算とか要件次第で採用する言語は違ってくるから。
ただ、JavaとPHPで速度差が実用に耐えられないほど開くような
複雑な計算をさせるような案件をやっていないだけかもしれない。
自分が今やってる案件は、
イントラ内の業務システムや、
携帯/PCサイトの更新用の管理ツール、実際にユーザが閲覧する画面等。
こういうのは、
パラメータを受け取って、入力チェックをして、DBに対して登録・更新などを行うとか、
DBに登録されてるデータを必要な件数だけ取得して表示するとか複雑な計算は必要としないものが多い。
こういう処理でJavaとPHPでそこまで差が開くのかな。
測ったらいいじゃんと言われたらそれまでだけど、そこまでの余裕はないので勘弁して下さい。
適当な計算させたり、DBに接続繰り返すだけの単純なテストして
それで○○が速いですねっていうのはひどすぎると思うし。
できれば実用的なシステムに対して負荷テストを行ってどの程度のアクセス数に
耐えられるのか比較するほうがいいと思う。
>もちろんJavaだからなんでも速いとは言わないが、やりたいことが増えるほど
>PHPは不利。
という点は同意。
PHPがJavaより速いと主張する気はなくて、
PHPも要件次第ではJavaとさほど変わらない事もあるんじゃないかと。
そういう場合にはやっぱりサーバの負荷分散とかインフラ周りが重要だと思う。
なんかいろいろ言ったけど、書いてるうちに
どっちが速かろうが客が満足すればそれでOK
という気がしてきた。
0065nobodyさん
2005/05/14(土) 03:27:15ID:???>パラメータを受け取って、入力チェックをして、DBに対して登録・更新などを行うとか、
>DBに登録されてるデータを必要な件数だけ取得して表示するとか複雑な計算は必要としないものが多い。
典型的なWEBアプリって感じだな。
こういうもんなら、実際差が出たとしても微々たるもんだろうし。
ただ、こういう処理に「オブジェクト指向プログラミング」と言えるほどのオブジェクト指向が必要かは微妙だな…
phpdocumentorとかでソースの管理はしやすいだろうけど。
0067nobodyさん
2005/05/14(土) 03:32:34ID:???006859
2005/05/14(土) 04:20:58ID:???>典型的なWEBアプリって感じだな。
>こういうもんなら、実際差が出たとしても微々たるもんだろうし。
PHPの仕事ってたいていこういう典型的なWEBアプリが多いんじゃないかな。
こういう場合には、言語よりもその他の要因でパフォーマンスが決まると思う。
>ただ、こういう処理に「オブジェクト指向プログラミング」と言えるほどのオブジェクト指向が必要かは微妙だな…
確かに。
適材適所というか、PHPに関しては、何でもガチガチのOOPで組めばいいというものではないと思う。
0069nobodyさん
2005/05/14(土) 13:08:26ID:???基本的にJava厨は正規表現使えない奴が多い。
0070nobodyさん
2005/05/14(土) 13:10:01ID:???鯖を強化
これで解決
PHPをコンパイルするソフトってあるんだね。
40マソだけど
0071nobodyさん
2005/05/14(土) 13:22:27ID:???Perl厨≧Ruby/Python厨≧php厨>>>Java5厨≧C/C++厨≧Java1.4厨>VB厨
0072nobodyさん
2005/05/14(土) 13:28:36ID:???でも逆にPerlとかPHP使いはHTTPをよく知らなかったりするんだよな
0073nobodyさん
2005/05/14(土) 13:38:18ID:???0074nobodyさん
2005/05/14(土) 17:18:57ID:???その場にあったパターンに合致するようなライブラリを昔は作ってたな。
C言語の時もそうだったけど。
そっちのほうがパフォーマンスが良かった。
パフォーマンスを犠牲にしてまで、標準のフルスペックの正規表現ルーチンを
使わざるを得ないスクリプト言語って可哀相だな。
0075nobodyさん
2005/05/14(土) 17:36:15ID:???その基礎が分かってない奴多いんだよJava厨には。
>>74
なんか時代に取り残されたC厨って感じだな。
今日日パフォーマンス重視のために正規表現使わず
独自ライブラリ作るアホはいねーよ。
0076nobodyさん
2005/05/14(土) 17:59:50ID:???使うまでもない時も多いとオモフ
0077nobodyさん
2005/05/14(土) 18:45:32ID:???パフォーマンス重視するのなら、作り込むのは普通だな。
つーか、だからクリティカルなシステムでは、JAVAとかCとかで作るんだろ。
0078nobodyさん
2005/05/14(土) 19:18:18ID:???0080nobodyさん
2005/05/14(土) 22:16:50ID:???0081nobodyさん
2005/05/15(日) 06:16:45ID:???PHPでもJavaでもどっちでもいいと思うけど。
0082nobodyさん
2005/05/15(日) 17:22:28ID:???0083nobodyさん
2005/05/15(日) 18:22:15ID:???0084nobodyさん
2005/05/15(日) 20:09:35ID:???1日20アクセスの無名な配布サイト…
0085nobodyさん
2005/05/15(日) 21:25:29ID:???0086nobodyさん
2005/05/16(月) 00:07:37ID:???0087nobodyさん
2005/05/16(月) 00:32:55ID:???0089nobodyさん
2005/05/16(月) 06:20:26ID:???0090nobodyさん
2005/05/31(火) 16:46:56ID:???VisualJ#始めました・・・
0091nobodyさん
2005/06/02(木) 19:31:18ID:em3h6hbO0092nobodyさん
2005/06/03(金) 00:00:08ID:???適宜インスタンス化して適当に呼び出せばいいんじゃないか。
0093nobodyさん
2005/06/03(金) 00:00:13ID:???0094nobodyさん
2005/06/03(金) 00:02:19ID:???0095nobodyさん
2005/06/03(金) 06:16:29ID:???明示的にポリモーフィズム出来ないじゃんと言いたかったんだろうけど
インターフェイスはポリモーフィズムの本質ではないからねぇ
0097nobodyさん
2005/06/05(日) 20:49:10ID:???0098nobodyさん
2005/06/05(日) 23:26:51ID:???0099nobodyさん
2005/06/06(月) 16:16:20ID:wLHryutA技術者不足気味らしいからPHPは開発、楽だったけどJAVAに方向転換するべ。
糞安いPHPの案件やるぐらいならJAVAだ。
0100nobodyさん
2005/06/06(月) 17:52:58ID:???0101nobodyさん
2005/06/06(月) 21:15:51ID:???ハ?じゃねよーバーカ。
お前は多態性すら知らんのか?
ニワトリ並みの知能指数ですなw
>>100
テメーもOOPの三大機能も知らずにこの板に顔出せるな?
少しは勉強しろよタコ。
0102nobodyさん
2005/06/06(月) 21:27:56ID:???オブジェクト指向を理解しているのなら、
PHP4でポリモーフィズムをどうやるのかって
聞かないよねー。
0103nobodyさん
2005/06/06(月) 23:37:11ID:???べんきょうしたばっかりなのかい?
(*´Д`)キャワイイネ
0104nobodyさん
2005/06/06(月) 23:50:49ID:???まともな技術者になれたらいいネ PUPUPU
0105nobodyさん
2005/06/07(火) 00:57:31ID:???言語なんて、中の考え方や実現方法が違うだけで、機能はどれも同じだと思うが。
それとも、従来の言語思想と異なる3つの点って意味かな?
0106nobodyさん
2005/06/07(火) 01:07:30ID:???0108nobodyさん
2005/06/07(火) 02:01:14ID:???・OOを実装していない言語が見えなくなる機能
・PHP4以下が無かったことになる機能
これぞ三大機能
0109nobodyさん
2005/06/07(火) 02:22:58ID:???君が本当にオブジェクト指向を理解しているなら、>>91という質問は有り得ないよ。
それに>>92-93で答えもらってるのにそれはスルーしてしまっているのはおかしくないか?
0110nobodyさん
2005/06/07(火) 02:41:41ID:???"三大機能" OOPに該当するページが見つかりませんでした。
m9(^Д^)プギャー
0111nobodyさん
2005/06/07(火) 04:24:59ID:???チミの思っているポリモーフィズムってどんなのだい?
コーディングレベルで説明してみ?
0113nobodyさん
2005/06/07(火) 09:56:54ID:???0114nobodyさん
2005/06/07(火) 10:20:24ID:???間違ってるかどうかではなく、三大要素を知ってるか知らないかなんてレベル低過(ry
どうも>>105みたいなのもいるらしいが・・・
マジレスするとPHPはJAVA同様に、メソッドのオーバーライドはデフォルトで動的束縛(って>>107にわかるだろうか?)。
だからポリモーフィズムを明示しなくても勝手にポリモーフィズムになる。
まさに>>93の通り同じ名前のメソッド実装すればいいだけ。
0116nobodyさん
2005/06/07(火) 14:13:04ID:???教科書的な知識のひけらかしが
何か懐かしいw
0117nobodyさん
2005/06/07(火) 15:39:34ID:???0118nobodyさん
2005/06/07(火) 20:25:11ID:???朝っぱらから昼まで何やってんだお前ら?
お前らみたいな雑魚ニートが社会人様に意見すんな。
働いてもいない奴に説得力なんてまったくねーよ。
しかもポリモーフィズムすらも知らんくせにw
なんでお前らみたいな雑魚がこの板にいるのよ?
場違いだ場違いw
とっととお母さんに小遣いでもせびりにいけよ。な?
0121nobodyさん
2005/06/07(火) 22:41:22ID:11Ag8MXs0123nobodyさん
2005/06/08(水) 00:29:27ID:???にちゃんねるには色々な人がいる。覚えておきなさい。
0124nobodyさん
2005/06/08(水) 00:42:41ID:???ネットワークにPCはぶら下がってないけどね。
自宅でやってる奴とか、ADSL直結みたいな中小企業なら知らんけど。
0125nobodyさん
2005/06/08(水) 02:31:39ID:???>>91=>>101=>>106=>>107は釣りだったわけだがw
ちなみに>>114を知識のひけらかしに思えるほどレベル低いやつは発言すんな
>>107のアンポンタンぶりにある意味勘違いして安心した厨どもが押し寄せたが勘弁してくれ。
別に大人でも子供でもいいからここからはまともな書き込みキボンヌ
0126nobodyさん
2005/06/08(水) 07:48:50ID:???0127nobodyさん
2005/06/08(水) 11:49:02ID:???> 掲示板に書き込めるようなネットワークにPCはぶら下がってないけどね。
2chは普通にHTTPで書き込みが行われるわけだが。Cookieにしたって
ネットワークからみればHTTPのヘッダの一部に過ぎないわけだし。
外部の80番ポートに繋げないネットワーク環境ってどんなんだよ。
そんな会社見たことないし、激しく不便そう。
0128nobodyさん
2005/06/08(水) 12:01:46ID:???ワカランでも無いが、社全体を外部との接続が全く無いのが「普通のセキュリティ」とは思えんな。
アクセスログをみりゃ、市区町村や省庁からのアクセスもたまにあるし、
GKをはじめ有名企業からのアクセスも多々ある。
あ、スレ違いだな。
0129nobodyさん
2005/06/08(水) 15:30:06ID:???企業内からネットに繋げるなんて当たり前の話じゃねえか
0130nobodyさん
2005/06/08(水) 16:04:54ID:???0134nobodyさん
2005/06/08(水) 22:55:27ID:???アクセス禁止サイトってのがあるだろ
プロキシなんかで弾いたりしてさ
客先は禁止サイトにアクセスしたら警告が出るぞ
0135nobodyさん
2005/06/08(水) 22:56:46ID:???大手企業は、都合の悪いサイトは、社員がアクセスできないようにしているのは当たり前だ。
0137nobodyさん
2005/06/08(水) 23:13:02ID:???「書き込めるようなネットワーク」ってことね。
勇み足でした。
0138nobodyさん
2005/06/08(水) 23:48:32ID:???0139nobodyさん
2005/06/08(水) 23:50:05ID:???日本語理解できてますか?
ネットにつなげられるかじゃなくて、2ちゃんに書き込みOKかどうかの話だろ?
なんか話を勝手に変えて、ネットアクセス自体ができないって事にして、
アホだって叩いてないか?
0141nobodyさん
2005/06/09(木) 00:16:42ID:???PHP5使いはエリートってことか
0142nobodyさん
2005/06/09(木) 00:32:26ID:???↓どう読んでもそういう風には読めない。
>>124
> ただ、普通のセキュリティに気を遣ってる企業なら、掲示板に書き込めるような
> ネットワークにPCはぶら下がってないけどね。
昔、出向先で2chに繋げなくしてるところがあったが、自作鯖とSSHコネクション張って
そこ踏み台にして自由に読み書きしてましたよ。
普通、ちょっと頭使えばそう言うことくらいはすぐにできるわけで、
「どのPCも掲示板に書き込めないネットワークに繋がってる」状態ってのは
もの凄くレアだと思うんだが。
0143nobodyさん
2005/06/09(木) 00:37:28ID:???かどうかは知らんが、ふしあなトラップを見ると大企業からの書き込みは
別に珍しくないね。go.jpからも時々アクセスあるし。
>>122-124
で、「普通の企業なら2chになんて書けない。(だからニート)」と言いたかったんだろうが、
逆に>>124の無知をさらけ出す結果になっちまったというわけ。
0144nobodyさん
2005/06/09(木) 00:52:58ID:???仕事の合間に2ちゃんねるを見てるようじゃ
ろくな仕事してないみたいだなw
ほとんどニートみたいなもんだろw
>>126
ポリモーフィズムという言葉すら知らんのか屑。
>>127
まともな企業ならプロ串かましてるだろうから
2ちゃんねるなんて見れないようにするなんて
普通にしてるだろ。そんなことも知らんの?
程度の低いWebプログラマですね。死ねば?
>>129
うわぁ・・・
マジでお前みたいな低レベルな奴がWebに携わってんの?
やめてくれマジで。とっとと田舎に帰りな小僧。
>>143
技術的に可能でも、どっちみち仕事中に2ちゃんねるに
書き込むような奴はまともじゃねーよ。
お前も屑ニートか。死ねよ雑魚w
0145nobodyさん
2005/06/09(木) 01:02:06ID:???会社員として厄介な奴だな。
遵法意識に欠けるお荷物社員だろ。
お前のせいで、ISO剥奪とかされなきゃいけどな。
0146nobodyさん
2005/06/09(木) 01:15:26ID:???正社員で、客先で穴開けなんてやってたら、社会人として終わってる
まぁ、バイトや派遣でも終わってるけど
なんでわざわざ閉じてあるのか考えた方がいい
0147nobodyさん
2005/06/09(木) 01:36:14ID:???全然OOP関係ねーし
そのフォーカスのにぶらせ具合でお前らの程度が知れるよ
ガキと馬鹿は一緒に失せろや
0148nobodyさん
2005/06/09(木) 03:21:57ID:???> まともな企業ならプロ串かましてるだろうから
今時そんな用途にProxy組むかよw いつの時代の話だ。
口開くたびにボロが出るな。ここまで来ると微笑ましい。
> 2ちゃんねるなんて見れないようにするなんて普通にしてるだろ
いやあ・・・そんな会社見たことないぞ。2chは情報源としてチェックしてる
会社の方が多いんでは?書けないようにしてるトコは何件か知ってるけど。
> 程度の低いWebプログラマですね。死ねば?
プログラマってのは納期に完成品を納品すりゃいいの。分かってないね。
だいたい俺はアドバイザで机借りてただけだから、ほとんどの時間がヒマ。
他の会社の仕事片付けてる時間の方が多かったくらいだよ。
>>145
出向だっつの。残念ながらバイトでも派遣でもどっかの社員でもないよ。
つーかSSHの先でHTTPクライアント使うのが穴開け?違法?ISO剥奪?すごい発想だな。
そもそも「居てくれれば助かる」っつーんで机借りて金もらってるだけで、ヒマな時間に何しようが自由。
0149nobodyさん
2005/06/09(木) 03:37:23ID:???この程度の知識のヤツが社会人ってのも凄いな。少なくともWebやOOPが本職がじゃないことは良く分かった
「ニートじゃない」ことが唯一の拠り所みたいだけど、本当に社会人なのかこいつ?
言っとくけどコンビニの店員とかは社会人とは言わないぞ
0150nobodyさん
2005/06/09(木) 07:36:19ID:???会社にとって命取りか。。。
やっぱり何の保険もない奴は雇わないに限るな
社内規定でわざわざ閉じているのに、それを中の人が無視してどうするのかと思う
0151nobodyさん
2005/06/09(木) 11:46:27ID:???相手の姿を妄想しながら叩き合う行為は愚か以外のなにものでもない。
そういう妄想攻撃を恥ずかしげもなくやっちゃう時点で、
そいつ自身のショボさのみは明らかにできるけどね。
0152nobodyさん
2005/06/09(木) 12:02:36ID:???設計は設計屋の仕事。実装なんかアルバイトにやらせりゃええねん
0154nobodyさん
2005/06/09(木) 13:46:36ID:???当然、客先の了解を取って、トンネル開けて2chに書き込んでたんだろう。
もし、無許可でやってたとしたら、皆が言うように恥ずかしい奴だが。
0157nobodyさん
2005/06/09(木) 16:17:25ID:???> やっぱり何の保険もない奴は雇わないに限るな
保険?何の話だ?保証の間違いか?
>>154
> 当然、客先の了解を取って、トンネル開けて2chに書き込んでたんだろう。
当たり前じゃないですか。というか「トンネル開けて」ってSSHの意味分かってないのかも
知れんが、仮想端末越しにブラウズしてるだけだぞ?
> 社内規定でわざわざ閉じているのに、それを中の人が無視してどうするのかと思う
会社のIPアドレスで余計なことして欲しくないから閉じてるんであって、
会社とは全く関係ないマシンから独立に書き込む分には何の問題も生じないでしょ。
その辺はちゃんと了解も取ってあるし。
0158nobodyさん
2005/06/09(木) 16:40:55ID:???ソース晒したら意見もらえるかな。
最近OOPの勉強を始めたので、出来る人から見ればクソみたいなソースかもしれませんが…
0159nobodyさん
2005/06/09(木) 20:58:08ID:???PROXYなんか当たり前の話だろ何言ってんだお前?
2ちゃんねるで情報収集?馬鹿かお前?
程度の低さが知れるなwお前みたいなのがWebプログラマを騙るなよ。
一緒にされたらかなわん。
>>149
>WebやOOPが本職がじゃない
ハァ?OOPって職なんですか?
なんだこのレベルの低さはw
もう書き込むなよ恥ずかしいだけだから。
0161nobodyさん
2005/06/10(金) 00:31:40ID:???>>157なんてイタくて見てられないくらいだもんな。釣りでしょ。
0162nobodyさん
2005/06/10(金) 00:53:16ID:???0163nobodyさん
2005/06/10(金) 00:56:44ID:???0164nobodyさん
2005/06/10(金) 02:18:25ID:???> PROXYなんか当たり前の話だろ何言ってんだお前?
Proxyが珍しいとは言ってないけど。
外部へのフィルタリングにProxyサーバなんて立てるか今時?って言ってるんだよ。
> 2ちゃんねるで情報収集?馬鹿かお前?
零細企業なら必要ないかも知れんけどな。ある程度大きいところになると
こういうトコに自社情報がリークしてたりは日常茶飯事なのよ。そういうのチェックする
部門だってあるぞ。あとググった結果が2chだったってことも別に珍しくないんだが。
あと、本職=専門って意味な。辞書引いてみ。
0165nobodyさん
2005/06/10(金) 03:25:40ID:???0166nobodyさん
2005/06/10(金) 06:17:15ID:???0167nobodyさん
2005/06/10(金) 11:24:28ID:???> メソッドのオーバーライドはデフォルトで動的束縛
ここが意味不明。
「オーバーライド」は継承時の実装上書きのこと。
継承が不要だと言いたいときになぜ出てくる?
0169nobodyさん
2005/06/10(金) 15:46:15ID:???class Oya { public function func() { return "親クラス"; } }
class Ko extends Oya { public function func() { return "子クラス"; } }
$obj = new Oya;
echo $obj->func(); // ここでは$objは親クラス
$obj = new Ko;
echo $obj->func(); // ここでは$objは子クラス
これはポリモーフィズムではないよな。
0170nobodyさん
2005/06/10(金) 16:14:54ID:???0171nobodyさん
2005/06/10(金) 16:25:48ID:???Javaしかやったことないから分からないんだろうな。
>>169 は数学も形で覚えるタイプ。
0173nobodyさん
2005/06/10(金) 21:11:21ID:???ポリモーフィズムとか言わないけどね
この馬鹿について語らないか?
0174nobodyさん
2005/06/10(金) 22:00:43ID:???(現場ではあまり)ポリモーフィズムとか言わないけどね
という意味か?
0175nobodyさん
2005/06/10(金) 22:00:46ID:Ba+L/9uuスレッドのタイトルが『PHPでオブジェクト指向プログラミング』となっているのだから、
相手を貶めたい人やらプロだのアマだのにこだわりたい人は邪魔ですよ。
この流れではスレッドの趣これい旨に沿った話題の展開さえままならない。
これ以上続けられても迷惑なばっかりなのでそろそろ止めてくれ。
小学生でも無いだろうし、お互い大人になろうよ。
0176nobodyさん
2005/06/10(金) 22:04:25ID:???ポリモーフィズム∈OOP
じゃないのか?
それにSmalltalkもObjCも型付け出来ないぞ。
静的型付けは確かに有用だが、
OOPに必ずしも必要という訳ではない。
それぞれの利点を考慮して
言語の性質に見合った設計をしていく事が大切だと俺は思う。
0177nobodyさん
2005/06/11(土) 00:19:38ID:???多態って言うなぁ
漢字にした方が、初心者の人でも、何のことかイメージしやすいし
相手が理解できない専門用語を言って満足してるアホみたいだから、横文字は好きじゃない
0180169
2005/06/11(土) 01:57:38ID:???ポリモーフィズムじゃヤダとか駄々をこねるので仕方なく多態でいってやろう。
だいたいお前の職場だろうがこのスレだろうが意味が通じることが重要ってのがお前の主張じゃないのか?
少なくともこのスレではポリモーフィズムを多態と言わなかったがための誤解なんてなかった気がするが。
>>176
俺はPHPには型がないからOOじゃないなんて言ってない。
PHPでOOP的な多態がどういう位置付けなのかを疑問に思っただけ。
Smalltalkを持ち出すってことは>>169も多態ってことになるんだろうが、そんなこと言ったらPHPにオブジェクト指向が導入される前からある言語仕様も全て多態って話になるだろ。
全ての変数は内部的に数値なのか文字列なのか配列なのかオブジェクトなのか、、、によって実行時に動的に振る舞いが決まるわけだからな。
0181nobodyさん
2005/06/11(土) 11:07:10ID:???それを阻む奴は、とことん攻撃するみたいなw
0182nobodyさん
2005/06/11(土) 12:01:10ID:???散々暴れて散々叩かれて消滅したが、実は何かをわかってて釣っていたのだろうか。
いや、それはない(反語)。
で、PHPのポリモーフィズムって結局何なのさ?
オブジェクト指向を謳うなら一言説明がほしいとこだ。>PHP
0183nobodyさん
2005/06/11(土) 23:59:38ID:???だからJAVA厨は嫌われるんだよ。
PHPでOOPやってる奴なら常識なのに。
0185nobodyさん
2005/06/12(日) 01:10:40ID:???お前も多態とか言って誤魔化しとけよwww
0186nobodyさん
2005/06/12(日) 02:11:20ID:???ポリモーフィズムというのはOOが持つ特性であって、
開発者がポリモーフィズムであることを意図していない機能は
それに「見えるような」振る舞いをしたとして、
あなたがそれをポリモーフィズムだと言っても、
それはあくまで主観(というかあなたの勝手な認識)でしかない。
0187nobodyさん
2005/06/12(日) 03:21:50ID:???引数や実行される環境によって振る舞いを変えればいいわけだし。
メンテナンス性などを考えればOOPな方がいいだろうけど。
PHP4での例とすれば、PEAR::DBなんかはポリモーフィズムじゃない。
DB::connectは渡されたDSNから判断して、DB_commonを継承した
各DBのサブクラスをインスタンス化して委譲することによって
多くのDBに対応している。
↓勘違いしてたらツッコミよろ↓
0188180
2005/06/12(日) 04:43:28ID:???微妙にワロタ
>>186
俺の言いたいのはあくまで
>PHPでOOP的な多態がどういう位置付けなのかを疑問に思っただけ。
であって
>(〜中略〜)ってことは(〜中略〜)全て多態って話になるだろ。
はただの推論なんで、そこに茶々いれられても。
(そこつっこんだわけじゃなかったならスマソ)
まー言語の開発者がポリモーフィズムを意図したかどうかに焦点があるべきなのは同意。
ただ直接聞くわけにもいかないからここで話してるわけで。
>>187
同意。たしかにそういうのもポリモーフィズムと言えると思う。
PEARに限らずPHPを使う側が意図してポリモーフィズム的な振る舞いを実装することはできる。
あとはPHPの言語仕様自体にポリモーフィズムがどう盛り込まれてるかって話。
はっきり言ってアフォな俺にはなかなかわからない。
0189187
2005/06/12(日) 05:42:38ID:???>あとはPHPの言語仕様自体にポリモーフィズムがどう盛り込まれてるかって話。
俺はJavaを知らない(つーかRubyもC++も知らん)のだけど、Javaにはどのように
盛り込まれているの? インターフェイスがそうなのか? それとも抽象クラスやメソッドを
定義できること?
0190nobodyさん
2005/06/12(日) 06:25:01ID:???Oya obj = new Ko();
obj.func();
で子クラスのメソッドが呼ばれる。
C++の場合は親クラスのメソッドにvirtualっていうキーワードをつけないと親クラスのメソッドが呼ばれてしまう(objがOya型として宣言されているため)。
ルビーは知らない。
0191nobodyさん
2005/06/12(日) 10:32:33ID:???0192nobodyさん
2005/06/12(日) 10:34:06ID:???0193nobodyさん
2005/06/12(日) 10:34:48ID:???0194nobodyさん
2005/06/12(日) 11:06:09ID:???188 名前:180[sage] 投稿日:2005/06/12(日) 04:43:28 ID:???
>>183-185
微妙にワロタ
0195nobodyさん
2005/06/12(日) 12:23:54ID:???0196nobodyさん
2005/06/12(日) 12:38:57ID:wbP1UJDj誰もわかんないのかよー!
俺もわかんないよー!
ヤケクンのアゲ
0198nobodyさん
2005/06/12(日) 14:06:38ID:???0200nobodyさん
2005/06/12(日) 17:57:05ID:wbP1UJDjVBかよ
0201nobodyさん
2005/06/12(日) 18:08:57ID:???OOPに標準とかあるのか知らないのが、とりあえず
ttp://www.computerlanguage.com/webexamples.htm
での検索結果によると、
>the ability of a generalized request (message) to produce different results based on the object that it is sent to
ま、OOP的に言えば、同じ名前のメソッドでもインスタンスの動的な状態(実行時の状態)に応じて適切にメソッドが呼ばれるってことだと解釈しておけばいいんじゃないの?
とりあえず俺も>>197の意見が聞きたい
0203nobodyさん
2005/06/13(月) 11:30:16ID:???0204nobodyさん
2005/06/13(月) 11:38:44ID:???$obj->method();
}
f を呼び出したとき $obj がどのクラスなのかに応じて適切な method() が呼び出されるわけだが。
0205nobodyさん
2005/06/13(月) 15:04:45ID:???0206nobodyさん
2005/06/13(月) 15:18:16ID:???わけだが。
0207nobodyさん
2005/06/13(月) 15:43:38ID:???そのコード読んで思ったんだけど、ビュークラスやDBクラスを分けてオブジェクト指向っぽく取り扱ったところで、糞分かりづらいだけでまったく意味ねえな、と。
0208nobodyさん
2005/06/13(月) 16:21:03ID:???0209nobodyさん
2005/06/13(月) 23:29:38ID:???いろんな型のデータを区別せずに扱えますよ、
ということだと認識してる。
同じ扱いなのに、実際のふるまいがポリモってるよ!という感じ?
だもんで、型がない場合は、その時点でてけとうに
ポリモーフィズムが実現されすぎちゃって困ってる、
という状況なんだと思われ。
型で制約されている場合でも、仮想関数表なんかを管理しとけば
どっこいポリモれちゃうんですよ奥さん、と。
(もともとは関数型言語方面で、このリスト型だとどんな型の値でも
ぶらさがりますよ、とか、関数を引数の型の微妙な違いで
オーバーロードできますよ、とかいうのがポリモーフィズム
だったらしいけど、OOP方面ではふつうそういうのまで
ポリモーフィズムとは言わない、よね?)
0210nobodyさん
2005/06/14(火) 03:02:54ID:???0211nobodyさん
2005/06/14(火) 03:17:23ID:???同意。
実装をする側がクラスごとに適切に書いておけば、それを使う側はオブジェクトごとにいちいち区別しなくても同じように使えて正しく動く。
それがOOP的ポリモーフィズムの利点だわな。
ま、
>ポリモーフィズムが実現されすぎちゃって困ってる
のかどうかは微妙な線だが、PHPなどの型なし言語はもともとポリモーフィズム的振る舞いをしていたから、殊にPHPでOOを導入する時に「この部分がポリモーフィズムだよ」という必要がなかったってこっちゃな。
>もともとは関数型言語方面で、(・・・)、とかいうのがポリモーフィズム
ってのは初めて知った。
0213nobodyさん
2005/06/14(火) 04:02:57ID:???0214nobodyさん
2005/06/14(火) 05:12:52ID:???違ったモノに同じ命令で言うこと聞かせられるようにすることだよ。
0215nobodyさん
2005/06/14(火) 10:10:02ID:???0217nobodyさん
2005/06/14(火) 16:20:27ID:???でも>>214でなんか少しわかった気がする。
動的束縛がなんちゃらとか、なんかすでにポリモーフィズムをわかっている人にしかわからない言葉を説明に使わないでほしい。
難しそうなことをいろいろ知ってるのはわかったから、それをわかりやすく説明できるようになってほしい。
でないとあんたらの頭の良さは全然伝わらないってことに気づいてほしい。
0218nobodyさん
2005/06/14(火) 17:03:30ID:???ある親クラスを継承した子クラスがすべて同じ名前のメソッドを持っていて
オブジェクトが変わると同じメソッドでも振舞いが変わるというように
理解したんだけど違う?
0219nobodyさん
2005/06/14(火) 17:42:45ID:???○ 振る舞いを変えることができる(メソッドのオーバーライド(override : 覆す、無効にする))
0220nobodyさん
2005/06/14(火) 18:06:57ID:???もともとここは初心者に説明するためのスレじゃないし
話の流れ的にも >>197 の講釈を待ってる間に野次馬ががやがや言ってるだけかと
素直に「動的束縛ってなんのことだかわからないので教えてください」と頭を下げれば
親切な人が教えてくれるんじゃないか
0221nobodyさん
2005/06/14(火) 19:59:09ID:???0224nobodyさん
2005/06/15(水) 02:40:19ID:???リスコフの置換原則は次のように謂う、
「派生クラスは、ユーザーが基底クラスとの違いに気付かずに、
基底クラスのインターフェイスを通じて使用できるものでなければならない。」
とゆうことは、
継承したクラスで独自にメソッド増やすのはよろしくないってこと?
0225224
2005/06/15(水) 02:42:17ID:???0226224
2005/06/15(水) 02:49:04ID:???基底クラスのメソッドは
継承クラスも基底クラスと同様に実装しておけってことで、
新しいメソッドを持つなって言ってるんじゃないね。そりゃそうか…
0227nobodyさん
2005/06/15(水) 03:19:21ID:???0228nobodyさん
2005/06/15(水) 03:42:43ID:???0229nobodyさん
2005/06/15(水) 03:46:15ID:???0230nobodyさん
2005/06/15(水) 04:30:26ID:???あーなんか静的束縛の説明が微妙にあやしーと思って一旦エディタに移動させたら
失敗して消えて頭もまっしろんなってる厨のいるスレはまさにここですYO
0231nobodyさん
2005/06/15(水) 07:50:33ID:???◆まずは下準備として、親クラス←子クラス←孫クラスという継承関係とする。
↓のように、親クラスでfuncというメソッドを宣言し、孫クラスでのみオーバーライドする。
class Oya { func() {return "親";} }
class Ko extends Oya { }
class Mago extends Ko { func() {return "孫";} }
◆ここで子クラスのオブジェクトobjを宣言してみる。
↓のように、ユーザ入力など実行するまで未定な要素をからめたコードを書く。
Ko obj; /* 子クラスのオブジェクトとして宣言。 */
switch ( ユーザ入力 ) {
case "子": obj = new Ko();
case "孫": obj = new Mago();
}
/* ここで問題。 */
obj.func();
◆さて、実行時にユーザが"孫"と入力した場合について考えてみる。
objにはnewによって孫クラスの実体(の参照)が代入されました。
obj.func()は"親"を返すのか?それとも"孫"を返すのか?
もう一度書いておくけど、objは親でも孫でもなく、子クラスとして宣言されたオブジェクト。
0232nobodyさん
2005/06/15(水) 07:51:09ID:???静的束縛なら"親"。
動的束縛なら"孫"。
なぜか?
◆静的束縛は、実行する以前に、
「objは子クラスなのだから、子クラスのfuncを呼び出せばいーだろ」
と決めつける。
子クラスは親クラスを継承している(つまり含んでいる)ので、親クラスのfuncが呼ばれる。
◆動的束縛は、実行時に、
「objが参照しているのは孫クラスの実体だから、孫クラスのfuncを探そう」
と柔軟に対処する。
孫クラスでfuncはオーバーライドされているので、その孫クラスのfuncが呼ばれる。
もちろん、もしオーバーライドされていなければ継承元クラスのfuncが呼ばれる。
つまり、静的=実行前、動的=実行時ってこと。
束縛という言葉が意味不明にきこえるかもしれないが、これは英語のbindingをアフォな人が和訳したため。
元々は「結びつける」というくらいの意味。
C++はデフォルトで静的束縛。JAVAはデフォルトで動的束縛。
0233nobodyさん
2005/06/15(水) 07:51:22ID:???静的束縛=実行前にメソッド決定=今時イラネ
動的束縛=実行時にメソッド決定=多態性の実現
ちなみに動的束縛・静的束縛の話題は、PHPのような型なし言語とはカンケーない。
よってスレ違い。
以上。
0234nobodyさん
2005/06/15(水) 16:39:11ID:???型のあるなしと関係あるん?
0236nobodyさん
2005/06/15(水) 20:23:54ID:???.______゙!lllll!l!llll!! ,llllllllllllllliiiiiii,,,,,,,、
.llllllllllllllllllllllllllllllllllllllll` ゙゙゙゙゙!!!!!!llllllllllllllll!
.l!!!!!!!!!!!!!!!!!!!!!!llllllllll .,iiiiiii,,,,,,,,゙゙゙゙゙!!!l゜
llllllllll lllllllllllllllllllliiiii,,,
llllllllll `゙゙゙゙゙!!!!lllllllll゜
_______,llllllllll .,illllliiiiiiii,,,,,,,, ゙゚゙゙′
lllllllllllllllllllllllllllllllllllllllll l!!!!llllllllllllllllllllliiiii,,,,,,、
'!!!!!!!!!!!!!!!!!!!!!!!lllllllll| ゙゙゙゙゙゙!!!!lllllllllllll!:
゙゚゙゙゙!!°
.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,、 ,,,,,,,,,,
.lllllllllllllllllllllllllllllllllllli、 lllllllllll
.'゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙lllllllllll゙′ llllllllll
,illllllllll゙` .llllllllll| ,,,i,,
,,iillllllllll゙` llllllllll| ,,,iilllllllli,
,,,iillllllllllllllllii,,, .lllllllllll .,,,iiilllllllllll!!゙゜
,,,,,iilllllllllllll!!!llllllllllllii,,、 llllllllll|.,,,,iiillllllllllll!!゙’
..liillllllllllllllll!!゙’ ゙゙!llllllllllllii、 .llllllllllllllllllllllll!!゙゙`
: ゙゙lllllll!!!゙゙` ゙゙!lll!!゙゜ .゙!lllllllllll!!!゙゙゜
.゙゙゛ : `゙゙゙゙″
0238nobodyさん
2005/06/16(木) 01:25:30ID:???0239nobodyさん
2005/06/16(木) 18:57:06ID:???・DBからデータを取得する場合、1要素づつオブジェクトにいれて、
それの集合体オブジェクトに追加していくものなのでしょうか。
・そうだとしたら検索する関数は、1要素づつのクラスのメンバでしょうか、
集合体のクラスのメンバなのでしょうか。
例えば請求書オブジェクトは、請求明細一覧オブジェクトをメンバとしています。
請求明細一覧は、請求明細のあつまりです。
請求書オブジェクトを生成する際の請求明細一覧を生成するロジック?が
わからないんです。どなたかよろしくお願いします。
0240nobodyさん
2005/06/16(木) 19:48:57ID:???( ゚д゚) ・・・・・?
0241nobodyさん
2005/06/16(木) 19:49:57ID:???その明細一覧というのがが、均質な項目をイパーイあつめた単なる表のような
データであって、かつ、一種類のメソッド群でさばききれる(多態性がいらない)んであれば、
たぶんそうこまかくする理由ってみつかりにくいんじゃないか。という気はするYO。
たいして効率に影響しなくて使いやすくてメンテ等もしやすければいいんだろうけどね。
0242nobodyさん
2005/06/16(木) 20:34:29ID:???めちゃめちゃ混乱してますな。
「請求書オブジェクト」という概念は捨てた方がいいんではないかと。
全て1つのオブジェクトに突っ込んでしまうのではなく、オブジェクトを役割ごとに分けるのも必要。
検索部分は検索結果とは別個のオブジェクトにすることが多いし、
検索結果は1レコードを保持できるオブジェクトとして設計することが多いと思う。
検索オブジェクトから検索結果オブジェクトのインスタンスがたくさん返ってくるイメージ。
それらをまとめて管理したいなら、複数の検索結果オブジェクトを1つにまとめる専用の
オブジェクトを更に別個に設計したりするわけだが、検索結果が多い場合や1レコードあたりのメモリ
占有量が大きい場合は、そういう概念で設計すると検索結果を全部メモリに読んでしまい
メモリを圧迫する結果になる。
1レコードずつDBから読んでは捨て読んでは捨てした方が効率がいい場合もあるわけ。
0243239
2005/06/16(木) 21:43:06ID:???独学の悲しさか何がわからないのかわからない程混乱してます。
もっとシンプルな例えとして「部署一覧」や、「部署コードから部署名」を検索する場合、
・部署一覧クラス(部署単体クラスの集まりをデータにもつ)
・部署クラス(部署単体のクラス)
・DBクラス(DBへアクセスしてSQLを実行する)
が必要かなと思うのですが(間違ってますでしょうか?)
■DBクラスのSQLを実行するfunction query($sql)は
何を返すべきなんでしょう。
1.部署オブジェクトの配列(さらに部署一覧オブジェクトに読み込む)
2.部署一覧オブジェクト
3.部署名の配列。それを改めて部署オブジェクトに読み込む(さらに
部署一覧オブジェクトに読み込む)
4.部署名の配列。それを部署一覧オブジェクトに読み込む。
■部署一覧を取得するfunction bushoList()と、部署名を検索するfindBusho($key)は
1.両方とも部署一覧クラスのメンバにする
もし該当部署がひとつしかなくても配列がひとつしかないとして処理する
2.findBusho($key)がひとつしかないことがわかっていれば
bushoList()は部署一覧クラス・findBusho($key)は部署クラスのメンバにする
3.両方とも部署クラスのメンバにして、複数の部署名の場合に
部署一覧オブジェクトを生成してそれに入れ込む。
なにを悩んでいるかわかっていただけますでしょうか。
エスパー能力をあてにしてすみません、お願いします。
多分、
>>241
細かくする理由が無い場合、どういうクラスにしたらいいのかわからないです。
>>242
読んでは捨て読んでは捨てというのは具体的にどうしたらいいのか
わからないです。
単純に請求書一覧を得るとか部署一覧を得るとかなら配列を使うなりして
できるのですが、オブジェクト指向だとどうするのかがさっぱりです。
0244nobodyさん
2005/06/16(木) 22:42:39ID:???> ■DBクラスのSQLを実行するfunction query($sql)は何を返すべきなんでしょう。
1〜4のどれでもいいのではないかと。データの内容や量、処理の内容によって
どれを選ぶかもプログラマの腕にかかってるわけで。
あと、DBオブジェクトとデータにアクセスするオブジェクトは別々に設計した方がいいのではないかと。
> ■部署一覧を取得するfunction bushoList()と、部署名を検索するfindBusho($key)は
自分だったらDBクラスを持った部署データを専門に扱う「人事課」みたいなオブジェクトを作るかな。
$jinji = new jinji();
$bushoList = $jinji->bushoList();
$bushoList2 = $jinji->findBusho('shomu');
bushoListやfindBushoが何を返すかは最初の疑問の答えを参照。
> 読んでは捨て読んでは捨てというのは具体的にどうしたらいいのか
例えば、検索結果を全部一度に配列にぶちこむのではなく、ループの中で
1つの変数に1レコードずつ結果を代入して処理する。ループが回るごとに
その変数は上書きされるから配列にぶちこむのに比べてメモリを食わない。
0245nobodyさん
2005/06/16(木) 23:30:18ID:???クラスに関数をまとめるだけで十分だよ。
オブジェクト指向の勉強するなら、JavaとかRubyとかにした方がいい。
0246nobodyさん
2005/06/16(木) 23:47:48ID:???大規模開発になると避けて通れなくなるよ。PHPのなんちゃってオブジェクト指向でも
利用する価値はある。
最近、「クラスに関数まとめるだけ」で適当に作ったサイトがつぎはぎで巨大化するにつれ
保守が間に合わなくなって破綻したのでなんとかしてくれっつー依頼が多い。
まあ逆にフレームワークとかテンプレートエンジンとか詰め込みすぎて負荷でパンクした
サイトも知ってるけど。
> オブジェクト指向の勉強するなら、JavaとかRubyとかにした方がいい。
これは同意。
0247nobodyさん
2005/06/16(木) 23:50:59ID:???0248nobodyさん
2005/06/17(金) 00:02:32ID:???PHPのよさは手軽にかけることなんだから。
0249nobodyさん
2005/06/17(金) 00:06:10ID:???0250239
2005/06/17(金) 00:11:43ID:???つ、ついていけない…。「これ以上どうやさしく説明すればいいんだよ」
と怒られそうですが。(丁寧に説明いただいてるは語感からわかります。
感謝です。)
■DBオブジェクトとデータにアクセスするオブジェクトって
どう違うものなのでしょうか?(あ、何か日本語も変だ)
■人事課オブジェクトを作るというのは…
今回の程度の場合、細分化して部署クラスとかを作るんじゃなくて、
(例えばそれはデータメンバの変数にしたりして)操作するクラスを
つくるという解釈でいいでしょうか。
クラスにするものの勘所が全然つかめない…。
0251nobodyさん
2005/06/17(金) 00:23:58ID:???PHPでも工夫すればオブジェクト指向開発できるって言っても、そんな不毛な工夫するより、その言語に適した開発アプローチを取るべきだと思う。
0252239
2005/06/17(金) 00:27:02ID:???>>247
「したいぜ」というか「してみたいぜ」です。みなさんは、「できるけど
やらない。」なのでしょうけど、私は「できない」のでやり方は知って
おきたいのです。
何をクラスにするのかは、案件によって違ってくるんでしょうけど、
なんというか、こう常套手段のようなものを例示してもらえないかなと
思ってるんですよ。例えばDBがあって、そこからデータを引っ張ってきて
そのデータを扱うという操作についてとか…。デザインパターンと実際の
(この例みたいなの)が結びつかないんです。
面と向かって尋ねられる人がいればもう少し理解がはやいのかなとも
思うのですがいないもので。
0253nobodyさん
2005/06/17(金) 00:34:44ID:???0254nobodyさん
2005/06/17(金) 01:16:39ID:???とりあえず、DBへアクセスして結果を取得するクラスに関しては自作するより
PEAR::DBを使うことをおすすめする。
0255nobodyさん
2005/06/17(金) 02:48:28ID:???>こう常套手段のようなものを例示してもらえないかなと
常套手段のサンプルコードとかは、巷ではPHPよりJAVAの方がずっと多いんじゃないかな。
だからちょっとがんばってJAVAやってみるのも勘所をつかむにはいいかも。
あと私見だけど、自分でクラスつくるときには、
クライアント側(class Bushoを書く側ではなくnew Bushoってやったりメソッド呼び出す側)
の人にとってどうしたら便利か考えながらやるのがいいと思う。
今の段階ではクライアントにあたるのも自分自身だろうから、よりいっそう自分の欲望に正直にできるはず。
0256255
2005/06/17(金) 02:53:13ID:???>>243の前半の質問の答えは>>244の言うとおり、何がやりたいかに応じてどれでもいいと思う。
後半のに関してはfindBusho()を部署一覧クラスのメンバにして
$list = new BushoList();
$kikaku = $list->findBusho('企画');
って感じで使用したらいいんじゃないかと。
もしfindBushoが部署クラスのメンバだったら
$soumu = $kikaku->findBusho('総務'); // !?
って感じで、特定の部署から他の部署を検索(?)みたいで意味不明かなと思った。
bushoList()メソッドの使いどころは、おいどんにはよくわからんとです。
まあとにかく「クライアント側でどう使ったらいいか」をよく考えてみて。
応援してるからガンガレ!
0257nobodyさん
2005/06/17(金) 03:19:33ID:???PHP5のオブジェクト指向はかなりJavaを意識して作られてると思うんだけど
それでもやっぱり物足りない感じですかね?
0258nobodyさん
2005/06/17(金) 03:28:16ID:???0259nobodyさん
2005/06/17(金) 07:29:07ID:???どーれ試しに。。。
$obj = new MyClass();
と
$obj = & new MyClass();
の違いって何ですか?
0260nobodyさん
2005/06/17(金) 07:38:56ID:???0261nobodyさん
2005/06/17(金) 07:57:27ID:???PHP5でやったらStrict error
Strict Standards: Assigning the return value of new by reference is deprecated in C:\home\php\test.php on line 5
0263nobodyさん
2005/06/17(金) 08:29:16ID:???0264nobodyさん
2005/06/17(金) 09:30:34ID:???> ■DBオブジェクトとデータにアクセスするオブジェクトってどう違うものなのでしょうか?(あ、何か日本語も変だ)
DBオブジェクトってのはデータベースに直接アクセスするモノでしょ?
どんな命令でもquery関数に渡せば実行しちゃうような。
それだとqueryに変なモノを渡された時に困るので、DBオブジェクトは直接
使わないようにして、queryを出す専用のオブジェクトを作るわけ。
部署管理なら、部署管理データを操作する専用のオブジェクトを設計する。
> 今回の程度の場合、細分化して部署クラスとかを作るんじゃなくて、
いや、部署オブジェクト(部署1つ分)のインスタンス(群)をリクエストに応じて生成するオブジェクトですね。
「こんな部署のリストください」と言ったら「はい、これとこれ」と言ってDBを勝手に検索して結果を渡して
くれるような存在。こういったオブジェクトには、部署データの更新なんかも任せれば良いかも知れない。
こうすれば、メインルーチンではDBへのSQL文をどうすればいいとか考えなくて済むし、
それもオブジェクト指向のメリット。SQL文絡みのエラーが出れば、それは「人事課オブジェクト」の
設計のせいだとすぐ分かる=バグの原因の特定が容易。
>>251
> PHPでも工夫すればオブジェクト指向開発できるって言っても、そんな不毛な工夫するより、
> その言語に適した開発アプローチを取るべきだと思う。
全然不毛ではないよ。ある程度以上の規模になると開発効率が全く違う。
本当に不毛ならなぜPEARがほとんどOOで書かれているのかと。
Perlのようにただパッケージを拡張しただけみたいな物でも充分使いではあるよ。
問題は機能の多彩さではなく、OOな考え方でプログラミングが可能かどうか。
機能はその補助(そしてあるときはOOな考え方を強制・補正する束縛)に過ぎない。
構造化プログラミングな思考で書かれたモノと正しいOOな思考で書かれたモノでは
開発効率も保守性も全然違う。
0265nobodyさん
2005/06/17(金) 11:33:13ID:???>問題は機能の多彩さではなく、OOな考え方でプログラミングが可能かどうか。
>機能はその補助(そしてあるときはOOな考え方を強制・補正する束縛)に過ぎない。
なかなか的を得てる表現だと思った。
>それだとqueryに変なモノを渡された時に困るので、DBオブジェクトは直接
>使わないようにして、queryを出す専用のオブジェクトを作るわけ。
メソッドの引数にSQL文をとらなければいいだけだと思うが。
作成するDBクラス自体に汎用性を持たせたいなら別だけど。
OOP練習中の>>250にはやや冗長かと。
0267nobodyさん
2005/06/17(金) 11:45:33ID:???リンクぐらい書かないとね
http://jp.php.net/manual/ja/language.oop.newref.php
0269nobodyさん
2005/06/17(金) 13:24:27ID:???>global $globalref;
>$globalref[] = &$this;
>// 内部への参照グローバル配列 $globalref を作成
>global $globalref;
>$globalref[] = &$this;
。。。なんかこれ、日本語がやばくないか?
「グローバルな配列 $globalref の中に参照(&$this)をひとつ作る(入れる)」ってことだよね?
0271nobodyさん
2005/06/17(金) 14:07:56ID:???最初のはインスタンスのコピーを返すが、2番目のは参照を返す。じゃなかったっけか。
$obj = new MyClass();
$obj2 = new MyClass();
$obj->setName("hello");
$obj2->setName("world");
$obj->printName();
実行結果: hello
$obj =& new MyClass();
$obj2 =& new MyClass();
$obj->setName("hello");
$obj2->setName("world");
$obj->printName();
実行結果: world
試してないけどこんな感じでは?
>>261
てきとー訳
> Strict Standards: Assigning the return value of new by reference is deprecated in C:\home\php\test.php on line 5
> 厳密な標準: newの戻り値を参照で割り当てるのは推奨されません。場所 C:\home\php\test.php の 5 行目
>>270
これもやってないけど、PHP4と同じ振る舞いをするんではなかろうか。
0272nobodyさん
2005/06/17(金) 14:27:34ID:???WEBプログラミングっていうのは、ユーザの入力を受け取って、それをDBに入れて、DBから出したものを加工して表示する。
このシーケンシャルな処理の繰り返しに過ぎない。
JavaのStrutsを例にとっても、あれをオブジェクト指向って印象は受けない。
入力データのチェックと画面遷移の仕組みを用意してあるだけだから。だけど、WEBプログラミングにはそれで十分なんだよね。
あれ以上の機能を持たすと、オーバースペックになって使いづらくなるから。
0273nobodyさん
2005/06/17(金) 14:30:50ID:???ほうほう
0274nobodyさん
2005/06/17(金) 14:37:07ID:???それは必要ないから、WEBアプリでは適用しづらいからだと思う。
FLASHとかAjaxみたいなのは別だろうけど、HTTPリクエストドリブンなWEBアプリだと使いどころが見つからない。
0275nobodyさん
2005/06/17(金) 14:45:35ID:???0276nobodyさん
2005/06/17(金) 14:47:54ID:???http://zope.jp/dictionary/SESSION%20object
0277nobodyさん
2005/06/17(金) 14:52:09ID:???けれど、オブジェクト指向開発が必要なケース、大規模開発のときに、これらの機能がないのは厳しい。
あるものとしてコードを書けって言っても、そんな優秀な人ばかりじゃないし、優秀な人でもミスはするし。
それはPerlでuse strictなしで1000行のプログラム書けっていうようなもの。
これを逆にたどって言えば、PHPでオブジェクト指向開発の意義が薄いってことになる。
0278nobodyさん
2005/06/17(金) 14:53:00ID:???レベルが下がってくるとこのスレは盛り上がるんだよなw
>>272 >>274
いつの時代までそんなこと言ってるつもりだ?w
0279nobodyさん
2005/06/17(金) 15:00:46ID:???んで、PHPファイルごとにDBオープンするコード書いて使いまわしが効かなくなって
開発ごとにスクラッチから起こしたり、入力、確認、完了、エラーで4枚似たようなスクリプト
用意してデザイン変わったら4枚とも書き直しだったりするんだよね。
確認画面で値チェックして完了画面ではフリーパスなスクリプトもしょっちゅう見るし。
OOを使わずに「なるほど」と思える大規模なWebプログラムって見たことないな。
完全にオブジェクト指向にする必要性は感じないが、メインルーチンをControlに見立てて
ViewとModelを分離するだけでもかなりすっきりするし保守性も上がる。
こういう風に書いた成果物は使いまわしが効きやすいし。
「そういうのはオブジェクト指向とは呼ばない」と言うなら見解の違いだろう。
少なくともWebアプリケーションでもOOでロジックを分離するメリットはある。
俺も完全に再利用可能な汎用オブジェクトを設計するのは、一部の例外(DBアクセスなど)を
除いてWebアプリケーションでは向いてないと思うけどね。PHP用フレームワークやWeb系PEAR
ライブラリの巨大さ、煩雑さを見るまでもなく。
>>277
> それはPerlでuse strictなしで1000行のプログラム書けっていうようなもの。
え???うちは.plの新規ファイルを立ち上げると、
#!/usr/bin/perl
use strict;
が自動的に挿入されるようになってますが?それで何十万行も書いてきましたが?
なんか、strictが面倒と思ってる人ってグローバルスコープの変数や関数使いまくりの
ぐちゃぐちゃなコード書いてそうだな……。普通に書いてればstrictでもエラーなど滅多に出ないんだが。
0280nobodyさん
2005/06/17(金) 15:09:39ID:???> #!/usr/bin/perl
> use strict;
> が自動的に挿入されるようになってますが?それで何十万行も書いてきましたが?
> なんか、strictが面倒と思ってる人ってグローバルスコープの変数や関数使いまくりの
> ぐちゃぐちゃなコード書いてそうだな……。普通に書いてればstrictでもエラーなど滅多に出ないんだが。
そうだよ。だけど、use strictなしでも、変数の使い方に注意すれば、同じプログラムは書ける。
とはいっても、それはかなりプログラマーの集中力を要する。
同様に、型無し、インターフェイスなしの言語で大規模開発をするのは、難しいと思う。ってこと。
0281nobodyさん
2005/06/17(金) 15:13:41ID:???0282nobodyさん
2005/06/17(金) 15:22:59ID:???> そうだよ。だけど、use strictなしでも、変数の使い方に注意すれば、同じプログラムは書ける。
> とはいっても、それはかなりプログラマーの集中力を要する。
いやいやいや、スコープ無視してグローバル使いまくりの方が最終的には疲れるでしょ。
保守性下がるし。ウチはuse strictでエラーが出るようなコードは他の人にも認めてないよ。
もちろん使い捨てのものとかは除く。PHPもファイル間でグローバル共有するのが好きな人が多くて困る。
> 同様に、型無し、インターフェイスなしの言語で大規模開発をするのは、難しいと思う。ってこと。
つまり、そもそも難しいのに構造化プログラミングで書いたらもっと大規模開発は難しくなる、ってことでしょー。
>>279
自己レス
> 俺も完全に再利用可能な汎用オブジェクトを設計するのは、
一度、入力→確認→完了のステップを管理するMVCモデルのクラスを設計したことが
あったんだが、それぞれ継承してメインルーチンから呼び出すと最低でも3*2+1=合計7ファイル、
フォームとかDBとか含めると1処理辺り10枚平気で超えるのでバカバカしいと思い止めた。
(まあフレームワークとか使ったモノをトレースするともっと凄い枚数出てくるけど)。
現在、メインルーチン=Controlの役割+Model+View+テンプレート+フォーム+DAOの
6枚のファイル構成が多いかな。
>>281
まあ本物の大規模開発ならPHPなぞ使わないわな。PHPで片付く案件の中での「大規模」
0283nobodyさん
2005/06/17(金) 15:24:39ID:???> >>272
> んで、PHPファイルごとにDBオープンするコード書いて使いまわしが効かなくなって
> 開発ごとにスクラッチから起こしたり、入力、確認、完了、エラーで4枚似たようなスクリプト
> 用意してデザイン変わったら4枚とも書き直しだったりするんだよね。
> 確認画面で値チェックして完了画面ではフリーパスなスクリプトもしょっちゅう見るし。
画面遷移や入力値チェックのフレームワークがあるのはいいと思うよ。
そういうフレームワークを自作するときにオブジェクト指向で作るのはいいと思う。
別にオブジェクト指向開発がまったくいらないって思ってるわけじゃないよ。
> 完全にオブジェクト指向にする必要性は感じないが、メインルーチンをControlに見立てて
> ViewとModelを分離するだけでもかなりすっきりするし保守性も上がる。
> こういう風に書いた成果物は使いまわしが効きやすいし。
> 「そういうのはオブジェクト指向とは呼ばない」と言うなら見解の違いだろう。
> 少なくともWebアプリケーションでもOOでロジックを分離するメリットはある。
Javaサーブレット+JSPとかだと、唯一のコントローラを作って、そこから別のビジネスロジックを呼び出すとか、JSPファイルを呼び出すとかするけど、
あれをそのままPHPに当てはめる必要はないと思う。
アンケートフォームで画面遷移するようなのだと、そういうのが便利かなと思うけど。
こういうのをファサードパターンとか解説してある本もあるけど、そうなの?って思うよ。
別にif文で条件分岐して、requireすればいいだけじゃん。って思う。
画面表示部分を分けたほうがいいのはその通りだけど、分離できないこともある。JSPのカスタムタグとか、あれが本当に便利な仕組みなのかな?って思う。
まあ、何百画面もあるような大規模なサイトなら便利なんだろうけど。
0284279
2005/06/17(金) 15:38:44ID:???> 別にオブジェクト指向開発がまったくいらないって思ってるわけじゃないよ。
んー、であれば大体同意。ガチガチにどれかのデザインパターンに押し込むような
真似はしなくてもいいと思う。
> 分離できないこともある。
だよね。smartyみたいに泥沼化するのは嫌なので、テンプレートからある程度View側に
文字列を取ってこれる仕組みを用意して、あとは実装依存にしてる。
大規模開発ならテンプレートエンジンを使うのもアリだけど、かえって面倒な場合が多い。
> JSPのカスタムタグとか、あれが本当に便利な仕組みなのかな?って思う。
使ったことはないけど、あんま便利そうには見えない。
0285nobodyさん
2005/06/17(金) 21:07:08ID:???0286nobodyさん
2005/06/17(金) 22:47:57ID:???おまいら、同じこと考えてるのに話が噛み合ってないように見えますよ?
>>277
意訳
「use strict なしでもキッチリしたコード書けるけど、
間違えてもエラー返ってこないからミスしやすい。」
で、>>277はstrictが面倒と思ってるわけではなくて、むしろ逆かと。
0288nobodyさん
2005/06/18(土) 00:23:01ID:???PHPでOO語るならPHP4じゃなくてPHP5を前提にしてくれる?
PHP4なんか過去のものなんだけど?
0290nobodyさん
2005/06/18(土) 00:40:52ID:???それ以外PHP5になにかあったっけ?
Apache2のスレッド処理に対応したとか?
0291nobodyさん
2005/06/18(土) 01:18:08ID:???>PHP4でOOを行うほどPHP5に移ったとき有り難味があるとか。
>それ以外PHP5になにかあったっけ?
そのOOの話がこのスレの話題であるべきもののひとつだろ。
スレッド処理etcはスレ違い。
>>289
>客先のサーバが全部PHP5で動くようになったら考えるよ。
こちらでドゾ
ttp://pc8.2ch.net/test/read.cgi/php/1118038954/
0292nobodyさん
2005/06/18(土) 01:36:38ID:???>・・・
>実行結果:?world
>試してないけどこんな感じでは?
いいえ。
>これもやってないけど、PHP4と同じ振る舞いをするんではなかろうか。
いいえ。
0294nobodyさん
2005/06/18(土) 15:57:59ID:???奴らは「PHPのOOは中途半端」とかいわれるのを恐れているの?
それともPHP6でOOPLになる予定なの?
0296nobodyさん
2005/06/18(土) 21:42:40ID:???曖昧すぎでわからん。
0298nobodyさん
2005/06/18(土) 23:39:02ID:???俺もOOPLじゃない理由はない気がするけど。
なんでマニュアルにOOPLじゃないと書いてあんだろう?
http://www.php.net/manual/ja/language.oop.object-comparison-php5.php
どこに書いてあったか忘れてたから探すのに手こずった。
日本語版の方ではPHP4のOOPのサブカテゴリだけど英語版の方ではPHP5側に移動されてるからいつリンクが切れるかわからんな。
一応英語版はこっち。
http://www.php.net/manual/en/language.oop5.object-comparison.php
0302nobodyさん
2005/06/19(日) 00:43:26ID:???できるようになればいいのにな。
0304nobodyさん
2005/06/19(日) 01:55:50ID:???0305nobodyさん
2005/06/19(日) 04:03:28ID:kZXyYjBV配列で事足りるけど、OO的に操作できないので
何か気持ち悪い V.S. 面倒の気持ちが戦っているんだけども
0306nobodyさん
2005/06/19(日) 05:47:08ID:???0307nobodyさん
2005/06/19(日) 06:52:44ID:???$obj->method()
の形で要素をいじれないでしょ?
0308nobodyさん
2005/06/19(日) 07:06:01ID:???まあ>>305で言っている通り配列で事足りるわけだし、漏れは作ろうと思ったことないな。
Listクラス作っても計算量を減らせるわけでもなさそうだし。
なんなら配列をメンバにもてばそれまでって気が・・・。
Javaみたいになんでもかんでも継承して使いたい的な考え?
漏れにはよく利点がわからないけど、なんかの役に立つってなら知りたいかも。
解説キボン。
0309nobodyさん
2005/06/19(日) 07:37:39ID:???0310nobodyさん
2005/06/19(日) 07:52:19ID:???0311nobodyさん
2005/06/19(日) 11:07:45ID:???0312nobodyさん
2005/06/19(日) 11:27:33ID:???よくPHPでガンガルな・・・・・・
ちなみにListってどう実装してんの?
class Node { private $data, $next; }
で$nextに参照いれるとか?
class List { private $array; }
だったりしてw
0313nobodyさん
2005/06/19(日) 12:08:25ID:???いや、逆にOO厨がPHPなんて全然OOじゃない!とか
言い出しそうなので先手を打っといたって感じがする
(あるいは既に叩かれたので書き足したとか)。
C++をOOPLじゃないと攻撃するPHPユーザは見たことないが、
PHPやC++をOOPLじゃないと攻撃するOO厨は沢山いるんじゃん?
print "abc";
こういうのもOOじゃないって怒る人いるよね。
"abc"->print();
すべからくこうすべきだと。
0315nobodyさん
2005/06/19(日) 13:28:36ID:9u3ddzIOPOSTのチェックはifの連続以外になんかないですか
0316nobodyさん
2005/06/19(日) 13:34:42ID:???0317nobodyさん
2005/06/19(日) 13:38:10ID:???名前がありませんとか長すぎますみたいなやつ
if(! $name) {...}
else($name > 100){...}
みたいな
0318nobodyさん
2005/06/19(日) 13:48:42ID:???まあ俺だったら空欄系は空欄系で、文字列長さ系は文字列長さ系で、不正文字系は不正文字系でまとめるけど。
どうでもいいけどそのコードテキトー杉だなw
0320nobodyさん
2005/06/19(日) 14:15:23ID:???function strLengthCheck ($str, $min, $max) {
if(strlen($data) < $min and strlen($data) > $max) {
return "長さが変だよ";
} else {
return 0;
}
}
こういうことにしても結局同じになるんだよなー
0321nobodyさん
2005/06/19(日) 15:04:48ID:???>>319
つ http://www.planewave.org/translations/quickform/html_quickform.html
ちと重いし使いにくいけどな。
こういうの参考にして自分なりにパッケージ作ってもいいし。
0322nobodyさん
2005/06/19(日) 15:31:14ID:???アドホックな使い方が出来るのがPHPの良さだし、
雑種的なものとして成長してきたから、
「必ずOOPを推奨するものでは決してありません」と言いたいのでは?
敷居の広さをアピールしているように俺は受け取ったが。
0323nobodyさん
2005/06/19(日) 15:41:22ID:???$length_limits = array(
'name' => array(5, 10),
'message' => array(0, 500),
...); // この部分DBやファイルに入れといて取得してもいいし。
foreach ($length_limits as $key => $limits)
{
list($min, $max) = $limits;
$len = strlen($_POST[$key];
if ($len < $min or $len > $max)
// 長さが変だよ
else
// 変じゃないよ
}
っていうかそんなに面倒だと思ったことないけどな。
0324nobodyさん
2005/06/19(日) 15:44:30ID:???0325nobodyさん
2005/06/19(日) 15:51:46ID:???0326nobodyさん
2005/06/19(日) 15:58:40ID:???一理あるな。
PHPはOOPでもいけるけど、使わなくてもいけるってのは大きな利点。
俺的にPHP5のOOはけっこうイイと思ってる。
中にはPHPはプリミティブ型がオブジェクトでないとか言う奴いそうだけど、そこまで不便でもないし。
まー型なし言語って意味で仲間のJavaScriptみたいなプリミティブ型の実装もけっこう好きだけど。
ガッチガチのOOしたいならOOPLを選べばいい。
0327nobodyさん
2005/06/19(日) 16:44:14ID:???同意。
>>325
チェックの条件を正規化してないから。でしょ多分。
んでも俺はクラス化してるけど、パスワードチェックの部分なんかはかなりif文並んでるよ。
※うちで必ずやる客が入力したパスワード検証
・英文字+αになっているか(英文字だけ、制御文字、バイナリ、日本語コードなどはNG)
・0123とかabcdとかasdfgとかqwertyとかが含まれていないか
・同じ文字が4つ以上連続していないか
・ユーザー名と同じでないか
・ユーザー名の逆順と同じでないか
・メールアドレスの左側と同じでないか
・メールアドレスの左側の逆順と(略
: めんどくさいのでやめ
て感じで推測されやすそうなのは全部弾き飛ばしてる。大きいシステムになると
ローマ字+英語のdic使って単語の組は弾いたりするよ。
0328nobodyさん
2005/06/19(日) 17:13:00ID:???そこにあげた項目ほとんどが結局はpreg_matchの類だろ。
だったらパターンだけ配列にいれてforeachで回せばifなんか激減だろ。
あ、いや、>>327に言ってるわけじゃなくて。>>324がifじゃ嫌とかいう話だったから。
>>327はifが並んでても気にしてないみたいだから好きなだけ並べてください。
0329nobodyさん
2005/06/19(日) 19:13:02ID:???文字数のmax・minチェックは?
必須チェックもあるだろ?
日付の妥当性チェックなんてのもある。
あんたが言うほど単純なものじゃないんだよ。
0330nobodyさん
2005/06/19(日) 19:20:24ID:???0332328
2005/06/20(月) 03:52:16ID:???パスワードのチェックを一生懸命頑張ってるのはわかったよ。
そこまでやると利用者にとってはムカつくだけの機能だけどなw
ちなみに俺はifの話をしてるだけなので。
ifは3回で済むやんその部分・・・
と言ってみる。
ちなみにもう一回言うけど、あんたがifを並べて書く分には文句ない。
>>315から始まったifダラダラが嫌な方々に対しての話だから。
それとも>>329=>>327=>>324=>>320=>>319=>>317=>>315だった?
それだったら必死こくのもうなずけるw
0333nobodyさん
2005/06/20(月) 07:26:24ID:???Singletonやたら多くね?
RequestやらSessionやらControllerやら、
基幹部品ほとんどSingletonになるやん。
0334nobodyさん
2005/06/20(月) 10:13:11ID:???まあ WebProgramming ってのはそういうものな気がする
漏れが1クラスで2つ以上のインスタンスを作るのって composite 系ぐらい
0336332
2005/06/20(月) 17:13:53ID:???あ、そいつは失敬・・・orz
なんか俺が書いた332の文章読み返してみたら、そうとうイパイパイだな。
反省。
>>333
たしかに制御部分なんかはシングルトンばっかだけどコンテンツと直接関連するとこはけっこうインスタンスつくるな。
インスタンスつくればつくるほど(OOじゃない場合に比べて)重くなっていくのがウザイけど。
PHP5だとその辺いかがなもんだろ?
0337333
2005/06/20(月) 19:57:28ID:???Singletonは実装がちょっとだけ面倒だな。
継承で実現できないから毎回同じルーチンをコピペしなきゃならないし。
>>336
4のなんちゃってOOよりは速くなってるはずだよ。
俺もインスタンスのリストも作ってるけど
DBから読んでいっぺんにオブジェクト全部作るより、
一つずつインスタンス作っては表示した方が、メモリ消費量は少ないよなぁとか思いだしたら
一層Singleton傾向が強くなっていくんだよな。
0338nobodyさん
2005/06/20(月) 22:01:02ID:???結構書かれててビビる。
でも便利すぎるから使いまくりな俺。
大丈夫、ResultやらControllerやらConfig何個も作るなんて
アリエナイアリエナイ……
ほとんどデータ格納系となんかの基底クラスだけだ、シングルトン使ってないの。
ヤバいか。ヤバいかも。
0339nobodyさん
2005/06/20(月) 23:34:21ID:???Singletonは便利な反面、保守性を低くしがちでもあるから諸刃の剣だよな。
継承できないのもイタイ。アクセス制限もシンドイ。
でも便利・・・。
誰かもっとビューティホーなデザパタ考案汁!
とりあえず使いすぎない程度にほどほどでいった方がいいと思うけど。
>>337
基本的には一つずつインスタンス作って表示でいきたいんだけどね〜。
ちょっと特殊なソートをやるときってどうしてもまとめて読み込むしかないんだよな。
ソートが必要だと一般にDBにやらせてもどうせ同じだけメモリ食ってるだろうし。
(詳しく知らんけどたぶん)
っていうかPHPにソートをやらせると速度激減w
0340nobodyさん
2005/06/20(月) 23:58:34ID:???その逆も楽。
あっすまん。PHPだと無理だ。
0341nobodyさん
2005/06/21(火) 01:22:49ID:???0342nobodyさん
2005/06/21(火) 03:18:21ID:???0343nobodyさん
2005/06/21(火) 05:18:57ID:m8dmNWb0一つの画面に複数の要素が入ってきて、
要素構成が動的に変化する場合、
viewにどんなオブジェクトを渡すのがいいかな?
たとえば同じRankingオブジェクトでも
メインコンテンツになったりサブコンテンツになったりするので、
Model層でView的な意味あいを考えなくちゃいけないというかさー
ModelにいながらViewしてんじゃんみたいな気持ちになるんだよな
うまいことできねーかな
0344nobodyさん
2005/06/21(火) 06:59:34ID:???Viewは出力しかしないって方向性で。
0346nobodyさん
2005/06/22(水) 16:07:00ID:???0349nobodyさん
2005/06/23(木) 16:32:51ID:???MもVもCもクラス作るんですか?
そして全部シングルトンですか?
教えてくれた人に投げキ○ス。
0350nobodyさん
2005/06/23(木) 16:46:02ID:???基本クラスになるでしょ。
0351nobodyさん
2005/06/23(木) 16:51:40ID:???0352nobodyさん
2005/06/23(木) 17:08:39ID:???だからincludeのみなのは
ちょっとおかしいかも
Modelで意味レベルの情報をViewに渡して
Viewは表示用に整形して、テンプレートに組み込む感じ。
0353nobodyさん
2005/06/23(木) 17:45:35ID:???0354nobodyさん
2005/06/23(木) 18:26:23ID:???>>279です。
VとMはクラス作ってやってます。簡単なものであれば、Cはメインルーチンに突っ込んでます。
メインルーチンはこんな感じ。
$form =& $_POST;
$action = new Action();
$result = $action->execute(&$form);
// 省略するけどここで$resultによってエラー処理などを行う
$view = new View();
$view->execute($form);
フォームの「入力」「確認」「完了」「エラー」のように複数のアクションがあるものは、
MVCを1つずつ作ってメインルーチンからCを呼び出してます。
継承させるとコストが掛かるし呼び出すファイルの枚数考えたらバカバカしいので、
テンプレートのようなコードをMVCの3つ用意しておいてページをつくるたびにコピーして書き足してます。
ただしCを書き直す場面はほとんどないです。
全部シングルトンっちゃシングルトンだけど、本来のシングルトンのように
明示的にインスタンスの複製を禁止するような機構は組み込んでません。
>>353
俺のことかな。
0355nobodyさん
2005/06/23(木) 19:44:02ID:???PHPだしラフに書くことが多いみたいね。
なんかちょっと前まで、このスレ読んでて「みんなシングルトンしっかり書いちゃってるのか?」とか疑問に思ったりした。
まあ結果的にインスタンスを一個ずつしか作ってないってことかな。
そんな漏れはincludeしまくり野郎。
ガンガンファイル数増えるね。
メソッドの中でのincludeはOOのありがたみを感じるな。
0356nobodyさん
2005/06/23(木) 20:04:04ID:wsWVtbWS強制するものだということは分かるんだけど、
どんな利点があるのか良く分からないです。
詳しい解説キボンヌなんですが。
0357nobodyさん
2005/06/23(木) 20:23:05ID:???プログラムのどこからでもアクセスできる、ってのが
便利なんだと思う。
俺も>354みたいな感じで処理してるけど、
resultオブジェクトなんかは、そこら中でインスタンス作ってると
Viewで処理するときに混乱しやすいから、Controllerの最初の方で
インスタンス化しておいて、プログラムが走ってる間はそのインスタンスに
アクセスして処理すると。
最終的に全クラスのエラーや処理結果が格納されるから混乱しない。
0358nobodyさん
2005/06/23(木) 20:23:28ID:???> 強制するものだということは分かるんだけど、
それが利点。
たとえばシングルトンにするクラスが他のクラスのインスタンス情報をプログラムの開始から終了まで一括管理してる場合、ヘタにnewされちゃうと管理してた情報が水の泡になってしまうことにもなる。
だからそれを防ぐためにシングルトンにする。
まあ通常はコンストラクタをpublicじゃなくすことで、外部での勝手なnewを禁止するのが常套手段。
だがしかし、PHP厨はただ単純にnewを一回しかやらないことをもって「シングルトン」と呼んでいるらしい。
何か違う気もする。
0359nobodyさん
2005/06/23(木) 22:13:04ID:???HTTPだと、リクエストごとにオブジェクト作り直しなんだから。
0360nobodyさん
2005/06/24(金) 01:05:47ID:???という認識だな
単に一回しかnewしないと自分の中で決めているだけだったら
後から見返した時、呼び出しだけ側だけ見ててもわかりにくいし。
0361nobodyさん
2005/06/24(金) 06:46:55ID:???結局Singletonだけですか?
Composite使いがどこかにいたような。
Listを作る人もいたような気がするのでIteratorも書くのかな?
教えてエロい人!
0362354
2005/06/24(金) 08:05:16ID:???Conpositeパターンは階層構造をサポートしたwiki作る時に使った記憶があるな。
Iteratorは特に意識しなくてもたまたまそういう実装になってしまう時がある。
DBによらない(DBならLIMITで対応できるから)リスト表示でページャをサポートする時など。
そもそも俺はデザインパターン原理主義ではなく、考えた末の実装がたまたまどれかの
デザインパターンに一致することの方が多い。基本的なデザインパターンは一通り
頭に入れてあるが、設計する時にパターンの一覧表とにらめっこしてどれに当てはめるか
考えたりするような真似はしない。
0363nobodyさん
2005/06/24(金) 08:21:41ID:???あんまり見てないけど
ActionChainがなくなったらしいので、その代わりになるようなものなのか
0364nobodyさん
2005/06/24(金) 10:34:44ID:???両方使ったことあったらそれぞれの長所短所を挙げてちょうだいな。
0365nobodyさん
2005/06/24(金) 11:13:34ID:???時代の趨勢は
Mojavi>>>>>Phrameって感じ
Phrame触ってみたことないので中身は知らないけど
0367nobodyさん
2005/06/24(金) 12:32:34ID:???0368nobodyさん
2005/06/24(金) 13:26:31ID:???Mojavi2を一回しか使ったことないけど、その感想。
恐らく勘違いしまくってると思うのでMojaviマスターの方ツッコミ入れてください。
んで便利さを俺に教えてください。
MVCフレームワークとしては良く出来てるが、Webアプリケーションに
ここまでする必要あるのかなあという疑問はある。基本的に全ページ同一の
index.phpから呼ばれる設計になるので、Webの階層構造の利点を捨てて
しまっている。URL_FORMAT=2も冗長。
mojaviのファイル階層が深くて作業しにくい。階層構造になってるのにファイル名長すぎ。
(Action数) * (Actionの戻り値数)個のViewを定義しなきゃならんので、同じような内容のViewが
ずらずら並んでしまう。diff取ったらTemplateファイルを定義してる行だけ違ったとかありがち。
なもんだから、View+フォームフォーマッタand/orテンプレートエンジンとの連携のところや、
Action(Module)とDaoの連携のところで汚い実装をしちゃうと取り返しのつかないことになる。
ほとんど同じ顔の汚いコードがずらり、みたいな。というか既にそうなっちゃってるところ多し。
「純粋にMVCは提供しただけ。後は好きに使ってくれい」みたいな感じのところがあるので、
プログラマの質によって非MVCスクリプトよりもタチの悪いグチャドロのコードになったり
非常に便利に使えたりの差が大きいと思う。
0369nobodyさん
2005/06/24(金) 14:07:51ID:???たしかにViewだらけになりそうと思った
でもView名は必ず変えなくちゃいけないというわけでもないから
色んな状況を一つのViewクラスで受けてもいいじゃん。
わりと融通がききそうという印象はあるな
0370nobodyさん
2005/06/24(金) 14:59:01ID:???>>368
> 基本的に全ページ同一のindex.phpから呼ばれる設計になるので、Webの階層構造の利点を捨ててしまっている。
DocumentRoot下をちゃんと階層分けしてそれぞれのファイルにアクセスしてもらうように作るのは厳しいかな?
> mojaviのファイル階層が深くて作業しにくい。階層構造になってるのにファイル名長すぎ。
> 同じような内容のViewがずらずら並んでしまう。
禿同。
思ったけどcontrollerの中の〜Exists()をオーバーライドして〜Action.class.phpなどを強制的にやめてファイル名短くするってのはどうかな?
元々付属してきたファイルのケアしなきゃならんのは逆にしんどいだろうか?
まだ始めたばかりなので色々模索中。
0371nobodyさん
2005/06/24(金) 15:00:33ID:???dispatchメソッドの引数にmodule名とaction名を渡せば良いよ
俺はフロントコントローラーとして使ってるけど
おまい様の言うとおりurlが冗長になるので
少しプログラムに手を入れて
index.php/module名/action名
で呼び出せるようにしてる。
mod_rewriteを使うという手もあるね。
2つめは、同意。
仕方ないので我慢してる。
しかし、逆に構成がはっきりしてるので
分かりやすいという利点もあるような気もする。
3つめは、その通りだと思う。
でも、mojavi3-devの次期verで解決するっぽい?
1つのactionにつき1つのviewに対応させるみたいだけど
どうなるのかね。
ttp://forum.mojavi.org/index.php?showtopic=975
0372nobodyさん
2005/06/24(金) 19:58:11ID:???0373nobodyさん
2005/06/25(土) 00:49:00ID:???全部VIEW_SUCCESSを返して(Requestに状況説明ほりこみつつ)
一つのViewクラスで処理するとかすればいいんでないの?
俺が勘違いしてる?
0374nobodyさん
2005/06/25(土) 02:58:54ID:???> 基本的に全ページ同一のindex.phpから呼ばれる設計になるので、Webの階層構造の利点を捨ててしまっている。
どんな利点があんの?
同一から呼ばれてるからこそのフィルタ処理とかのメリットがあるんだが、それ以上のメリットがあるの?
0375nobodyさん
2005/06/25(土) 03:06:12ID:???>(Action数) * (Actionの戻り値数)個のViewを定義しなきゃならんので、
これ間違いね。
例えば、追加と編集のフォームやバリデーションなんかはViewのロジックはほとんど同じだから、
追加でAction&Viewを作ってやって、編集ではforward&VIEW_NONEでOK
編集用のViewは作らなくてすむ
0377nobodyさん
2005/06/25(土) 03:23:44ID:???>同一のファイルから呼ばれなくても同じクラス再利用すればいいのでは?
いってることが違うんだけど、どう言えば理解できるかなぁ…
0378376
2005/06/25(土) 03:27:27ID:???> 同一から呼ばれてるからこそのフィルタ処理とかのメリットがある
の部分だけにつっこんでみた。
>>368への反論としての意味は考慮してなかった。
0380nobodyさん
2005/06/25(土) 03:31:04ID:???index.phひとつpで経由してるから、個別の処理をクラスとして定義できて、forwardやactionchainみたいな
処理が可能になってるわけだけど、バラバラにしちゃった場合どうすんの?
あ、あとmod_rewriteでいじくる場合もこっちのが楽っぽいよね
0381nobodyさん
2005/06/25(土) 03:33:03ID:???↑まちがえた
0382nobodyさん
2005/06/25(土) 03:35:40ID:???dispatchの引数色々変えられるし。
ファイルわけとけば継承した自作Controller呼べる選択の余地もあるし。
とか言って実際やってみたわけではないがw
0384nobodyさん
2005/06/25(土) 03:39:29ID:???0385nobodyさん
2005/06/25(土) 03:46:31ID:???これはあんまりメリットにならんよね。
Controllerが違う時点でMVCから外れちゃってるし
てかactionChain理解してる?
0386nobodyさん
2005/06/25(土) 04:12:24ID:???Strutsの場合はサーブレットを基点に考えられてるから、そうせざるを得ないかもしれないけど。
ユーザやデザイナ、更新作業するオペレータって、ディレクトリ構造になれてるからね。戸惑うことが多いだろうね。
SEO的にも問題があるし。
0387nobodyさん
2005/06/25(土) 04:16:35ID:???MojaviとかSmartyはむしろもっと機能を減らした方がバランスがいいんじゃないかな。
0388nobodyさん
2005/06/25(土) 04:39:46ID:???たぶん話がくいちがってるな。
まず俺は「ファイル分け推奨派」側ではないので。べつにindex.phpで問題なし。
ただファイル分けしたいとかいう意見も面白いと思った。
同じサーバ上で複数の異なるサービス展開したいとか、URLレベルではModule/Actionの組み合わせ以外でアクセスされたいとか個々人で事情があるんだろうし。
まーMojaviの標準から外れた方法使う分手間はかかるだろうが、大したことないでしょ。
で、その上で俺の言いたかったのは、再利用するなら同じクラス(または継承クラス)使えばいいだけでしょ、という話。
フィルタだろうがアクションだろうが。
別にファイル階層化の方が利点があるかどうかには俺は言及してない。
0389nobodyさん
2005/06/25(土) 06:56:49ID:???まーね。
とは言っても小規模ならフレームワーク使わなくてもいいわけだし、MojaviやSmartyはPHPの可能性を広げてるって見方もあると思うけど。
「不必要な機能は使わなければいい」ってのは当たり前に思えることにもかかわらず、実際にはそれが明確になりにくいから「無駄に多機能」って印象も生まれるんではないかと。
高機能・多機能にすればするほど重くなるのは確かだが、MojaviやSmartyで「無駄に重くなってる」って感じはしないかも。
0390nobodyさん
2005/06/25(土) 14:50:03ID:???俺はアクセスカウンタでも自作フレームワーク使ってるけどね。
MojaviもStrutsもそれ自体の機脳をおぼえなくてはいけないので
冗長すぎると俺は思う。
0391nobodyさん
2005/06/25(土) 14:59:09ID:???片っ端から全部覚えようとするから冗長に思えるのでは?
0392nobodyさん
2005/06/25(土) 15:32:24ID:???> Webの階層構造の利点
これについては、URIにおいて階層構造でドキュメントの位置を特定できるという
本来のWebの意義を捨てるのはどうなのかなあという事です。
階層ごとにアクセス制限をつけるといったこともやりにくいですよね。
>>371の方法はスマートですね。なければ作れよと。自分がプログラマなのを忘れてました。
>>373
それだと何のためにActionがリザルトコード返してるんだよ?って問題になりそうなので。
エラー処理をVIEW_SUCCESSに処理させるのって見通し的に問題ありません?
>>391
冗長すぎるというよりも、Webの世界ではmojaviが当てはまるほどの規模の開発があまりないって事ですかね。
いまだに「会員登録」「一覧表示」「ドキュメント管理」「買い物システム」みたいな案件が多いですから。
先般mojaviで頼まれた案件は、自作のフレームワークの方が工数1/4くらいで済みそうでした。
昔作った計1000ページ近くに及ぶ顧客・企業・オーナーを結ぶデータベースへのアクセスインターフェイス、
あのくらいの規模だとmojaviでやったら工数減ったかも。
0393nobodyさん
2005/06/26(日) 05:32:44ID:???まずパッケージの中身見たらSmartyViewが空っぽでした。
とりあえずPHPViewをほぼ真似てSmartyViewを自作。
しかし、Smartyのキャッシュ機能のせいで、ActionとかFilterとか編集したときにそれが反映されない。
仕方ないので編集中はSmartyのキャッシュを無効に切り替えて対応。
なんか今後も振り回されそうな悪寒もあり。
よりよい方法はありませんか?
0394nobodyさん
2005/06/26(日) 12:03:06ID:???とりあえず「もはび」と語尾上がりで読んでしまう。
桶?
0396nobodyさん
2005/06/26(日) 13:08:30ID:???0397nobodyさん
2005/06/26(日) 13:10:59ID:???0398nobodyさん
2005/06/26(日) 13:12:33ID:???0399nobodyさん
2005/06/26(日) 13:36:13ID:???0400nobodyさん
2005/06/26(日) 13:40:55ID:???0401nobodyさん
2005/06/26(日) 13:47:17ID:???0402nobodyさん
2005/06/26(日) 14:08:20ID:???0403nobodyさん
2005/06/26(日) 14:11:37ID:???0404nobodyさん
2005/06/26(日) 14:28:16ID:???0405nobodyさん
2005/06/26(日) 14:28:58ID:???|´∀`';/^l
|u'''^u;' |
|∀ ` ミ ダレモイナイ・・・
| ⊂ :, モジャモジャ スルナラ イマノウチ
| ミ
| 彡
| ,:'
|''~''''∪
l^丶
モジャモジャ | '゙''"'''゙ y-―,
ミ ´ ∀ ` ,:'
(丶 (丶 ミ
(( ミ ;': ハ,_,ハ
;: ミ ';´∀`';,
`:; ,:' c c.ミ
U"゙'''~"^'丶) u''゙"J
/^l
,―-y'"'~"゙´ | モジャモジャ
ヽ ´ ∀ ` ゙':
ミ .,/) 、/)
゙, "' ´''ミ ハ,_,ハ
(( ミ ;:' ,:' ´∀`';
'; 彡 :: っ ,っ
(/~"゙''´~"U ι''"゙''u
0406nobodyさん
2005/06/26(日) 16:24:17ID:???0407nobodyさん
2005/06/26(日) 16:27:02ID:???もうねぇ、語源とかどーでもいいよ。
俺たち日本人はアルファベットを見るとローマ字読みしたくなる人種なんだよ。
モジャビ、モジャビ。
モジャビで決定。
>>405
わかったわかった。
0408nobodyさん
2005/06/26(日) 17:24:40ID:???日本人は律儀な方だと思うよ。アメリカ人なんてグルジア共和国
とかヨハネ・パウロ二世とか全部英語読みだもんな。
「mojavi pronounce」でググったらこんなん見つけた。
やっぱり奴らはモジャヴィで抵抗ないらしい。
http://forum.mojavi.org/index.php?showtopic=1077
つーかググった結果が33件って。mojaviでググっても
日本語のページばかりだし、日本でしか流行ってないのか。
0409nobodyさん
2005/06/26(日) 18:14:35ID:???そこの書き込み読ませてもらったけど、モハーベ砂漠(アメリカにある砂漠)に倣ってhで発音する派もいるみたいじゃん。
ちなみにモハーベ砂漠のMojaveの発音は「モゥ・ハァ・ヴィ」って感じのようだ。
ハァのとこにストレスで。
http://www.answers.com/mohave
↑発音も聞けるw
あと、「33件かよーっ!?」って思って俺もググってみたら実際はもうちょい出たよ
http://www.google.com/search?hl=en&q=mojavi
Results 1 - 10 of about 45,200 for mojavi. (0.04 seconds)
とりあえず俺はモハービでいくとするかな。
0410nobodyさん
2005/06/26(日) 20:06:06ID:???> あと、「33件かよーっ!?」って思って俺もググってみたら実際はもうちょい出たよ
いや、33件しか出なかったのは 「mojavi pronounce」でググった結果について。
mojavi単体で45,200ってのもかなり少ないね。
日本語googleの結果が1万件くらいだから1/4弱が日本語のページってことになる。
0411nobodyさん
2005/06/26(日) 20:45:24ID:???日本人の情報収集力の高さと見るか。
単に新しいもの好きですぐとびつきたくなるタチと見るか。
0412nobodyさん
2005/06/26(日) 21:36:48ID:???ちょっとしたフレームワークを作ろうと思って、
Factoryに引数を与えるとその名前でクラスを生成してくる、
みたいなのを考えてるんですが。
0413nobodyさん
2005/06/27(月) 00:51:05ID:???できなくてもeval()使えば確実。
0414nobodyさん
2005/06/27(月) 01:58:50ID:???のように一度作ったオブジェクトを削除するにはどうしたらいいんですか?
unsetだとだめっぽいんですけど。
0415nobodyさん
2005/06/27(月) 05:13:50ID:???0417nobodyさん
2005/06/27(月) 08:45:57ID:???いつの間にかアメリカの歴史の話になっている。
恐るべきスレだな・・・。
みんなもWebProgばっかやってちゃダメだぞ。
0418nobodyさん
2005/06/27(月) 20:12:48ID:???別に速度は変わらないんでしょうか。
0419nobodyさん
2005/06/27(月) 21:33:03ID:???0420nobodyさん
2005/06/27(月) 22:20:41ID:???Thx, eval関数の中でnewすることで作ったよ!
PHP4は型制限が緩いから俺様フレームワーク作るのは結構簡単だーね。
他人に使ってもらって使いやすいってのは難しいけど。
インターフェイスとか無いし。
PHP5で追加されたんだっけ。
0421nobodyさん
2005/06/28(火) 08:50:18ID:???速度に関しては何とも言えんな。
PHP5のオブジェクト指向に関する利点は、カプセル化、抽象クラスとインターフェース、__autoloadあたりの「機能」面だと思う。
オブジェクトの参照をうまく扱うようになったみたいだからメモリの使用量は減ると思うけど、その恩恵が得られるのは大量のオブジェクトを生成した場合くらいだな。
まあ元々Webプログラミングではオブジェクトを無闇にガンガン生成しないってのが鉄則だから、メモリに関しても速度に関してと同様に大して利点と言えないかもね。
0422nobodyさん
2005/06/28(火) 08:55:01ID:???あのさぁ、マニュアルに思いっきり載ってるんだけど。
http://www.php.net/manual/ja/language.oop5.patterns.php
俺ならevalではなくnew $classnameだな。
0424422
2005/06/28(火) 09:59:34ID:???Mojavi3ではファクトリーの実装でINIファイルをパースして、適切なクラス名のオブジェクトを生成するPHPのコードを自動生成してるみたいだ。
INIを編集しない限りは生成されたPHPファイルをそのままrequireしてるね。
ま、Mojaviの場合はシングルトン実装するために結局はnewInstance($class)メソッドの中で
$object = new $class();
とやってるけど。
っていうかPHP5イイな。
シングルトンをラクラク継承できる。
>>423
はい。>>423の勘違いぶりよりは幾分マシですが。
0425nobodyさん
2005/06/28(火) 11:04:43ID:???0427nobodyさん
2005/06/28(火) 13:05:11ID:???0428nobodyさん
2005/06/28(火) 13:29:41ID:???staticな$instanceは、継承したところで基底クラスにしか存在しないだろ?
0429nobodyさん
2005/06/28(火) 13:56:05ID:???0430nobodyさん
2005/06/28(火) 14:03:58ID:???継承したクラスからgetInstanceすると、すべて同じインスタンスをgetしてしまうから、
継承は出来ないんじゃないの?
424は自分でやってみてから言ってるのか?
0431nobodyさん
2005/06/28(火) 14:06:54ID:???0432nobodyさん
2005/06/28(火) 14:28:51ID:???0433nobodyさん
2005/06/28(火) 14:31:48ID:???0434424
2005/06/28(火) 14:42:27ID:???基本的に基底クラスとそこから派生したクラス全てに関して、プログラムのなかで一つしかインスタンスが存在しないものを考えてた。
class Singleton
{
private static $instance = null;
protected function __construct() {}
public static final function newInstance( $className )
{
if ( self::$instance !== null )
throw new Exception( '2つ目のインスタンス' );
self::$instance = new $className();
if ( ! ( self::$instance instanceof Singleton ) )
throw new Exception( 'クラス名が変' );
return self::$instance;
}
public static final function getInstance()
{
if ( ! isset( self::$instance ) )
throw new Exception( 'まだ生成されてない' );
return self::$instance;
}
}
派生クラスで個別にインスタンスほしいなら、finalを消して>>431のようにやればできるけど、それじゃこの親クラス意味ないね・・・。
コンストラクタに引数渡したい場合ちとツライが、Mojaviでは引数を共通の方法(連想配列)で渡すことで対処してた。
0435nobodyさん
2005/06/28(火) 15:21:04ID:???protectedなスタティックメソッドつかえばなんとかなるかな?(てきとう)
0436424
2005/06/28(火) 16:07:50ID:???class ChildSingleton extends Singleton
{
public function saySomething()
{
echo 'something';
}
}
$obj = Singleton::newInstance( 'ChildSingleton' );
$obj->saySomething();
// 以下は全てエラー
$obj2 = new Singleton();
$obj3 = new ChildSingleton();
$obj4 = Singleton::newInstance( 'Singleton' ); // 2つめのインスタンス
$obj5 = Singleton::newInstance( 'ChildSingleton' ); // 同様
その他のメソッドもスタティックではなく、通常のインスタンスメソッドでOK。
ちなみに今の状態だと、Singletonクラスの派生クラスにpublicなコンストラクタを書くと、そいつはシングルトンでなくなる。
それを禁止したい場合は、基底クラスのコンストラクタをfinalにすればよい。
0437nobodyさん
2005/06/28(火) 17:45:05ID:???そこが穴になりそうな予感。でもそんなことなかったらすまぬ。
↓ここの例だと、基底クラスのコンストラクタが必ず呼ばれることを利用して派生クラスを縛ってる。
http://www.hyuki.com/techinfo/singleton.html
0440nobodyさん
2005/06/28(火) 21:32:15ID:HyE/S+PBモジャはRequestオブジェクトに一括してほりこんでるけど。
俺はRequestとResultも分けてるから、
Errorクラスも別に作った方がキレイかなとも思う。
しかしErrorはResultの一部とも考えられるし…とか思うと
無駄に迷う。
0441nobodyさん
2005/06/28(火) 22:06:19ID:cNCUVPCu0442nobodyさん
2005/06/28(火) 22:10:50ID:???0443nobodyさん
2005/06/28(火) 22:51:32ID:???mojaviのようにビューへ処理の結果が通知されるようになっている。エラーならエラーと。
んで、エラーの内容はResultにぶち込んでる。
大規模な開発になったら考えるけど、あまり変に凝らない方が結局
保守しやすいコードになったりする。
0444nobodyさん
2005/06/28(火) 23:34:22ID:???0445nobodyさん
2005/06/28(火) 23:36:32ID:???あ、そうか。つーか「コンストラクタにfinal」の意味が飲み込めなかったが、それが裏技的にアリなわけか。
そうするとコンストラクタはテンプレメソッドにしておいて、派生クラスごとの初期化には
コンストラクタから一定の初期化メソッドを呼ぶようにすればよいとかそういう感じかな
0446nobodyさん
2005/06/28(火) 23:37:30ID:???確かにOOPの罠の一つは「凝りすぎる」ことだと思う
純文学的プログラミングに陥ると
いつまでたっても完成しないもんなぁ…
0448nobodyさん
2005/06/29(水) 00:49:31ID:???彼が書いたWikiのソースコードを読んでみたことがあるんだが、
とてもじゃないけどOOを理解してる人のコードじゃなかったね。
昔のコードなのかもしんないけど、名前空間がとっ散らかってて
ロジックも一貫性がなくて悪いコードの見本みたいな感じだった。
>>446
コードを書くたびにどんどん仕事量が減っていくようなら正しいプログラミングが出来てる。
汎用ライブラリを作ったはいいけど、何だかんだで案件をこなすたびに書き直しを余儀なくされて
バージョンが分散してどれがどれやら分からなくなっちゃってる人、自分が書いたコードなのに、
時間が経つと内容が把握するのに時間が掛かっちゃう人は何かが間違ってる。
あと凝ることは大事だと思うけど、OOに囚われるあまり手段が目的化しちゃってる人は多いね。
「1)納期に間に合って2)正確に動いて3)保守が簡単」ならば手段は問わないわけで。
その手段としてOOが提供されているのであって、OOであることを目的にしちゃいかん。
「上の3つの要素を満たすコードを書いた結果、たまたまOOになってた」ってのが正解。
0449nobodyさん
2005/06/29(水) 03:51:33ID:???ちょっと前までPerlでガリガリ系のプログラマがPHPに以降し始めて
OOPを必死で習得しようとしてるのかな。(俺もそうだけど)
一世を風靡したKENTさんなんてビジネスロジックとプレゼンテーションの
分離すら理解できてないみたいだけど今は苦労してるんだろうな。
もう隠居したかなw
0454nobodyさん
2005/06/29(水) 07:57:21ID:???本家のサイトにはチュートリアルみたいなのないし、ググってもモジャ2が中心で・・・。
日本語か英語で解説してあるサイトが知りたいです。
よろしくお願いします。
>>363
Viewの中にあるdecorate()メソッドはどういうときに使うのですか?
モジャパッケージ内のクラスでも使用している箇所はないようなのですが。
0455nobodyさん
2005/06/29(水) 10:34:58ID:???> ちょっと前までPerlでガリガリ系のプログラマがPHPに以降し始めて
> OOPを必死で習得しようとしてるのかな。(俺もそうだけど)
PerlでもOO的な書き方はできるし、(Jcode.pmがOO的なので
大抵のPerl書きはOOの恩恵にあずかってるはず)、逆にPHPも
ロジックが混在した汚いコードは多いよ。一概に言えないんでは?
0456nobodyさん
2005/06/29(水) 11:45:23ID:???どう分けるのかがいまいち分からなかった。
MからCに制御を戻さずにそのままVに移してたから一つのクラスになってた。
Mojavi見てやっとイメージが掴めた。
あと体得してきたノウハウ↓
・オブジェクトを擬人化して考える
・インターフェイスから考える(インターフェイスが出来たら実装は出来たようなもん)
0458nobodyさん
2005/06/29(水) 12:33:25ID:???俺はStrutsとか触ったことないからよくわかってないのかもしれないけど、なるほどと思えるところがたくさんあった。
しかしMojavi3でどうしても解せないのがActionやViewのexecuteが、Controllerの中ではなくFilterの中で呼ばれていることだな。
いやむしろExecutionFilterの存在自体が謎だ・・・。
Controllerの中でやってしまえばよかったのでは?
まーこれに関してはMojavi内部での処理なのでどーでもいいといえばどーでもいいのだが。
あとFilter書くとき、条件が通ったら$filterChain->execute()呼んで、ダメだったときは$controller->forward()ってのもちと解りづらい気がするが、ちまたのMVCでもそういうものなの?
もう一つついでに、Viewとか他のクラスの中からその時々のActionをContextから直に取得できないのがツライな。
$this->getContext()->getController()->getActionStack()->getLastEntry()->getAction();
ってちょっと待ってくれよ・・・。
取得しないほうが吉ってことなのかな?
それとも俺なんか見逃してる?
0459nobodyさん
2005/06/29(水) 17:30:50ID:EqNehqGXこういうのうまいことする方法ってないですか
0461nobodyさん
2005/06/29(水) 19:04:41ID:YzX/r9GnAjaxの記事が気になって買いにいったら
PHPのフレームワークについてかなり詳しく書いてた
そこで俺は勘違いに気付いたのだが
Actionクラスはプレゼンテーション層だから
あまりロジックは書かない方がいいんだな。
Actionに書いた方がいいのかとロジッククラスをバラして
もりもり書いてたよw
0462nobodyさん
2005/06/29(水) 19:08:09ID:???コマンド実行は
フィルタと本質的な違いはないからでは?>ExecutionFilter
俺はソース見た時、なるほどなぁ〜と思ったよ。
0463nobodyさん
2005/06/29(水) 19:56:34ID:???ってなかなか便利だな。各オブジェクトにこいつだけ渡せばいいもんな。
0464458
2005/06/29(水) 20:11:59ID:???やべ、俺も誤解してた部分あるかも。
頭に入れとこ。THX。
>>462
フィルタってキタナイやつをストップさせて、キレイなやつを通してやるのが目的じゃないの?
コマンド実行ってのはどうとらえたらよいのだろうか・・・?
まーMojaviのソースって、手本になるような美しさがあるかは別として、発想力に富んだ内容だと思う。
うなづける部分が多いね。
>>463
同意。Contextってネーミングもウマイ。
俺的にはgetAction()欲しかった。
自分で追加するのは簡単だけど、Mojavi3完成時に辻褄合わなくなるのも嫌だしな。
俺は根性なしだ・・・。
0466461
2005/06/29(水) 21:20:57ID:???ごっちゃにしてる奴も多いと思う。
今ロジックの中でRequest読んでデータ処理するように書いてたんだが、
Requestは多分プレゼンテーション層かな?
Action段階で取り出して、ロジックに渡した方がいいのかな。
今度はActionとロジックの区分けに悩みはじめたよw
0467nobodyさん
2005/06/29(水) 21:40:13ID:???中間層がWeb層とビジネスロジック層に分かれてるとか。
てことはやっぱりRequestはActionだろうな…ハァむづい。
0468nobodyさん
2005/06/29(水) 23:37:36ID:???View = プレゼンテーション
Control = コントローラー
ではないのか?
0471nobodyさん
2005/06/30(木) 05:29:25ID:???業務のキモとしてのデータの取り扱い方という形だけになるんだと思う。
ビジネスロジック呼ぶものがそれ以外にもあったとしてもね。
0473nobodyさん
2005/06/30(木) 07:45:00ID:???0474nobodyさん
2005/06/30(木) 08:59:34ID:???0475nobodyさん
2005/06/30(木) 09:01:20ID:???0476nobodyさん
2005/06/30(木) 09:13:29ID:???好き嫌いはあるだろうけど。
0477nobodyさん
2005/06/30(木) 09:17:08ID:???なんとなくまとまってるような気がするべ
0478nobodyさん
2005/06/30(木) 15:37:35ID:???0479nobodyさん
2005/06/30(木) 15:48:51ID:???ソース見たら、11行目、metaのcopyrightのところが文字化けしてんな。
MSBが立ってる文字が3バイトあるのでUTF-8の「©」でも突っ込んだんではないかと。
0480nobodyさん
2005/07/01(金) 00:13:28ID:???これ書いたの漏れなんだけど、なぜphpでMVCにこだわるの?
その答えは散乱しちゃうから、上のスレにレスくれれば良いとして
MVCについて出来る範囲で答えますよ。
漏れはphpは最近始めたばかりで、今まではJavaばっかり。
>>466
>今度はActionとロジックの区分けに悩みはじめたよw
教科書のような説明だと、Actionにロジック書くのはNGだけど書いても
嫌がられない場合もあるよ。
それはロジックが大したこと無いとき。MVCで、なんで役割ごとにバラバラ
にするかって?それは、再利用性、保守性を上げるため。
再利用もしないし、コードの見通しが悪くなるほど量も無いし、
変更も頻繁に入らない。そんなコードは堂々とActionに書いちゃって良いと
思うよ。
0481nobodyさん
2005/07/01(金) 00:28:02ID:???>Actionクラスはプレゼンテーション層だから
>あまりロジックは書かない方がいいんだな。
別にそんなことはない。
0482nobodyさん
2005/07/01(金) 00:36:04ID:???0483nobodyさん
2005/07/01(金) 00:38:57ID:???だからそういうふうに書けばいいんじゃないの?
0484nobodyさん
2005/07/01(金) 02:57:45ID:???Actionクラスを再利用するケースなんてないと思うけどな。
再利用するくらいなら、そのActionにマッピングされたURLを使い回せばいいし。
0485nobodyさん
2005/07/01(金) 12:31:12ID:???0487nobodyさん
2005/07/02(土) 02:01:02ID:???evalの動的クラス定義おもろいな
テンプレートだけ作れば、actionもviewも用意しなくてもいいようにでけた。
0497nobodyさん
2005/07/02(土) 16:14:50ID:???$class()でいいやん。
>テンプレートだけ作れば、actionもviewも用意しなくてもいいようにでけた。
身の毛もよだつキモさだな。
0498nobodyさん
2005/07/02(土) 17:50:42ID:???0499nobodyさん
2005/07/02(土) 18:47:26ID:???0500nobodyさん
2005/07/02(土) 18:52:16ID:???0501nobodyさん
2005/07/02(土) 18:55:39ID:???0502nobodyさん
2005/07/02(土) 21:52:19ID:???パスワードと確認用パスワード
を比べるみたいな設定ってどうやったらいいの?
0503nobodyさん
2005/07/02(土) 22:02:22ID:???0505nobodyさん
2005/07/03(日) 14:01:39ID:???0506nobodyさん
2005/07/03(日) 17:26:50ID:???0507nobodyさん
2005/07/03(日) 18:15:06ID:???注意していても万が一ってのがある品・・
0508nobodyさん
2005/07/03(日) 19:58:15ID:???0509nobodyさん
2005/07/03(日) 20:07:47ID:???掲示板なら管理画面と本体みたいな感じでいいんですか?
0510nobodyさん
2005/07/04(月) 00:00:07ID:???てかモジュールいらなくね?とすら思う
0511nobodyさん
2005/07/04(月) 13:52:14ID:???0512nobodyさん
2005/07/04(月) 15:34:12ID:???使えるけど使わない
使う必要すらない
使う奴のほうがチキン
>>511は何にevalを使ってらっしゃるの?
0514nobodyさん
2005/07/04(月) 18:06:37ID:???$controller = $this->getContext()->getController();
と
$controller = Controller::getInstance();
のどっちがいいと思いますか?
他のシングルトンなオブジェクト(UserとかRequestとか)もどうしようか迷います。
0515nobodyさん
2005/07/04(月) 19:25:59ID:???がお作法通り。
基本的にContextタンの管理物はContextタンにお伺いを立てるが筋。
0517nobodyさん
2005/07/04(月) 20:31:14ID:???プログラマを騙るな雑魚。
0519nobodyさん
2005/07/05(火) 05:33:21ID:???なるほど、そういうことですか。
Controller::getInstance()はMojavi内部で使用されるものととらえておけばいいのかな?
なんかちゃんとしたドキュメントがまだないから、Mojavi内部用なのか我々ユーザー向けに提供されたインターフェイスなのか迷うことが多いな。
getActionとかgetViewとか新しいインスタンスを生成しちゃうし、おそらく内部用だよね。
でもgetModelもインスタンス生成だけど、こっちはおそらくユーザー用だし。
なかなか難しい・・・。
>>517は言葉は悪いが同意。
evalは保守性、可読性、共に下げる原因になる。
何でもできる「自由さがアダになった点」ではグローバル変数と同類。
ちなみにnew $classname;との比較としてevalを語るならいいが、evalの優位性も語らず不毛に単体で支持するのはスレ違い。
0520nobodyさん
2005/07/05(火) 07:32:14ID:???0522nobodyさん
2005/07/05(火) 09:21:23ID:???0524nobodyさん
2005/07/05(火) 09:55:56ID:???消えてくれるとありがたいのだが。
0525nobodyさん
2005/07/05(火) 10:47:54ID:???プップププー
0528nobodyさん
2005/07/05(火) 12:05:24ID:???0529nobodyさん
2005/07/05(火) 22:05:20ID:???ログが取りやすいことだな〜
特にDBのクエリログは激しく便利
0530nobodyさん
2005/07/06(水) 04:14:18ID:???0532nobodyさん
2005/07/06(水) 16:46:25ID:???0533nobodyさん
2005/07/06(水) 16:48:12ID:???PHPでオブジェクトってどう使ったらいいのですか?
0535nobodyさん
2005/07/06(水) 20:46:36ID:???オブジェクト指向自体の勉強から始めた方がいいと思う
本屋にGO
0536nobodyさん
2005/07/06(水) 21:04:32ID:???を知らない奴はプログラマを騙らないで欲しい。
0537nobodyさん
2005/07/06(水) 21:51:21ID:???オブジェクト指向・デザインパターン・フレームワークを教えて下さい。後で本も買いますので。
0538nobodyさん
2005/07/06(水) 22:52:07ID:???どんだけコンパクトな知識やねんw
OOなんて知の最高峰みたいなモンで
ほとんど哲学の領域にまで踏み込んでるのに
0539nobodyさん
2005/07/06(水) 23:35:43ID:???ところでPHPでオブジェクト指向っぽいサンプルコードをどのたかちょこっと
書込んでいただけないでしょうか。本と照らし合わせてなにが
オブジェクト指向たらんのか調べてみようと思うしだいです。
0540nobodyさん
2005/07/06(水) 23:54:56ID:J6s2TI5Sあちこちにあるだろ。
ググるなりすればすぐに見つかるからてめぇで探せ。
それができないようなヤツにプログラミングなど無理。
0541540
2005/07/06(水) 23:55:22ID:???0544nobodyさん
2005/07/07(木) 06:13:15ID:???わざわざありがとうございます。
とりあえず>>540に指摘されましたので、Webを散策して勉強中です。
メソッドが自分自身の参照や新たなインスタンスを戻り値として返す場合
>>543みたいに「インスタンス変数->メソッド()->メソッド();」
みたいなメソッドコールを連結して記述できるのは、PHP5だけですか?
PHP4だと、Parse errorが出てしまいました。
しかたないので、メッソドの戻り値を代入したテンポラリインスタンスを用意して
メッソドコールしましたけど、なんか美しくないんですよね。
とりあえず、今は、>>543風に示すとこんな状態です。
{>>539}->read(new web(OOP,PHP))->try(new environment(PHP4));
0545nobodyさん
2005/07/07(木) 06:13:59ID:???<?PHP
class test{
var $value;
function test($argv){
$this->value = $argv;
}
function set($argv){
$this->value = $argv;
return $this;
}
function show(){
return $this->value;
}
}
$test = new test("Hello World<br>");
print $test->show();
//print $test->set("Hello OOP World")->show();
$tmp = $test->set("Hello OOP World<br>");
print $tmp->show();
?>
0546nobodyさん
2005/07/07(木) 06:43:42ID:???<?PHP
class test{
var $value;
function test($argv){
return $this->set($argv);
}
function set($argv){
$this->value = $this->is_class($argv)?$argv->show():$argv;
return $this;
}
function show(){
return $this->value;
}
function is_class($obj){
$status;
if(get_class($obj)==get_class($this)){
$status = 1;
}
return $status;
}
}
$test1 = new test("Hello OOP World<br>");
$test2 = new test($test1);
print $test2->show();
?>
0548nobodyさん
2005/07/07(木) 06:51:33ID:???return get_class($obj)==get_class($this);
0549nobodyさん
2005/07/07(木) 07:05:55ID:???やっぱり、そうなんですか...残念。
しかし、試しにテストプログラム作ってみましたけど、面白いですね。
まだ、継承とかは使ってないですけど、>>546のコードを実装する時に
コンストラクタとsetメッソドが同じようなコードになるので
いっそのことコンストラクタで、setメソッドを呼出せば
修正箇所は1箇所になるよなとか、valueプロパティは、最小限の呼出にして
自分内部での参照もshowメソッド経由でアクセスすれば、$valueの意味を変えたり
$valueは非公開プロパティでもいいなとか、後のメンテナンス性を考慮した
実装を考える事ができますね。
0550nobodyさん
2005/07/07(木) 09:09:19ID:???<?PHP
class test{
var $value;
function test($argv){
$this->set($argv);
}
function set($argv){
$this->value = $this->is_class($argv)?$argv->show():$argv;
return $this;
}
function show(){
return $this->value;
}
function is_class($obj){
return get_class($obj)==get_class($this);
}
}
0551nobodyさん
2005/07/07(木) 09:09:38ID:???function sub_test($argv){
$this->test($argv);
}
function show_replace($str){
return preg_replace('/<!--\[replace\]-->/',parent::show(),$str);
}
function show(){
return "[".parent::show()."]";
}
}
$test1 = new test("Hello World");
$test2 = new sub_test("Hello World");
print $test1->show()."<br>";
print $test2->show()."<br>";
print $test2->show_replace('【<!--[replace]-->】<br>');
$test2->set('Hello OOP World');
print $test2->show_replace('『<!--[replace]-->』<br>');
?>
0552nobodyさん
2005/07/07(木) 09:19:30ID:???おかげでオブジェクト指向プログラミングの基礎を理解できることができました。
デザインパターンやフレームワークもおいおい学んで行きます。
0554nobodyさん
2005/07/07(木) 09:35:01ID:???みなさんは、このレベルだったら30分もあれば理解できるんでしょうね。さすがだと感心しました。
自分もこれから精進しようと思います。でも自分がプログラマだとは騙りませんの御安心ください。
0555nobodyさん
2005/07/07(木) 09:48:10ID:???さっそく自分がなにか理解違いしていましたか、失礼しました。
一応自分の理解では、多能性(たのうせい:ポリモーズヒズム)を以下の意味で使っています。
異なるオブジェクトに同じメッセージを送った場合に
そのオブジェクトの特性に会わせて振る舞いを設定できるということなので
>>550の場合、親クラスであるtestクラスのshowメソッドと
子クラスであるsub_testクラスのshowメソッドという同じ名前の
異なる振る舞いをするメソッドを実装しました。
testクラスでは、valueプロパティの値をそのまま戻り値として返しますが
sub_testクラスでは、valueの値の前後に"[]"を付けた値を戻り値として返します。
0557553
2005/07/07(木) 10:20:42ID:???×多能性(たのうせい) - ポリモーズヒズム(?)
○多態性(たたいせい) - ポリモーフィズム
「能」の下に心をつけるのを忘れないでください。
解釈としては>>555でおk。
狭義には「同じインスタンスに同じメッセージを送った場合にオブジェクトに応じた振る舞いをすること」
という風にもとらえられるけど、大した問題じゃない罠。
0559nobodyさん
2005/07/07(木) 12:19:52ID:???知らなかった。
0560nobodyさん
2005/07/07(木) 12:32:56ID:???狭義の多態性(こんどは間違って無い)が気になったので、自分なりにサンプルを書いてみました。
PHP4を使っているためか、自分が未熟なためか(たぶんこちらでしょう)、
最終的にevalに頼らざる状態になりましたが、一応動くものができました。
こんな感じの実装でいいでしょうか?
受取ったオブジェクトの種類によってsub_testクラスのshowメソッドの振る舞いが変化します。
<?PHP
class test{
var $value;
function test($argv){
$this->set($argv);
}
function set($argv){
$this->value = get_class($argv)?$argv->value:$argv;
return $this;
}
function show(){
return $this->value;
}
}
0561nobodyさん
2005/07/07(木) 12:33:22ID:???function sub_test1($argv){
$this->test($argv);
}
function show(){
return "[".parent::show()."]";
}
}
class sub_test2 extends test{
function sub_test2($argv){
$this->test($argv);
}
function show(){
return "{".parent::show()."}";
}
}
0562nobodyさん
2005/07/07(木) 12:33:37ID:???var $show_class;
function test($argv){
$this->test($argv);
}
function set($argv){
$this->show_class = get_class($argv);
return parent::set($argv);
}
function show(){
eval("\$tmp = $this->show_class::show();");
return $tmp;
}
}
$str = 'Hello OOP World';
$test1 = new sub_test(new sub_test1($str));
$test2 = new sub_test(new sub_test2($str));
print $test1->show()."<br>";
print $test2->show()."<br>";
?>
0563nobodyさん
2005/07/07(木) 13:08:12ID:???こんな感じでどうでしょ?
print get_value(new sub_test1($str)) . "<br>";
print get_value(new sub_test2($str)) . "<br>";
function get_value($obj) { return $obj->show(); }
// 同じインスタンス($obj)に同じメッセージ(show)だけど違う結果が返る
0564nobodyさん
2005/07/07(木) 13:32:11ID:???PHPにおけるポリモーフィズムの是非に関するアフォ話はこのスレの前半にチラホラでてるよ。
0565nobodyさん
2005/07/07(木) 14:09:28ID:???なるほど、いちいちコンストラクタ経由で初期化しなくてもいいわけでなんですね。
インスタンス・メソッドで直接オブジェクトを受取ってそのまま受取ったオブジェクトのメソッドをコールしちゃうわけですね。
つまり用語の定義を理解してその実装ができていればいいわけで、こうであるべきという実装方法というのはないわけなんですね。
ただ、シンプルに実装できれば、後のメンテナンス性とか考えた場合はいろいろ利用価値がありますよってことですね。
サンプルコード大変参考になりました。
>漏れの書いた「狭義の」ポリモーフィズムなんて敢えてPHPで実現する必要ないと思う。
ふつふつと好奇心が涌いてやってしまいました。
>PHPにおけるポリモーフィズムの是非に関するアフォ話はこのスレの前半にチラホラでてるよ。
ちょっと読んではみたんですが話の流れが不毛だったので途中で断念しました。
また色々試してみます。助言ありがとうございました。
0566nobodyさん
2005/07/10(日) 01:55:11ID:FkUTlorqエラーにしたいのですが
どのような方法があるでしょうか?
0567nobodyさん
2005/07/10(日) 02:45:33ID:???このサイトを見ると「Abstract::set」でJavaでいうところの
abstractを実装しているみたいなんだけどこれってPHP4でもできるの?
初めて知ったんだけど。
0568nobodyさん
2005/07/10(日) 06:31:47ID:???PHP4じゃ難しいかもね。
ま、それがprivateにしたいメソッドまで外から呼び出せてしまうPHP4の難点だ罠。
基本的にSingletonは無理だと思ったほうがいいかも。
>>567
PHP4ではオーバーライドし忘れのメソッドコール時に初めてエラー吐いて対処するしかないんだよね。
Mojavi2もそれだな。
0571nobodyさん
2005/07/11(月) 06:21:36ID:1O09a/aM今、あるクラスのクラス名を考えているのですが、いい名前が思いつきません。
このクラスは時間と文字列をメンバ変数に持つだけの単純なものなのですが(Java風に書くと↓)、
いろいろな用途に使われるため、安易に名前が付けられないのです。
class X{
Date date;
String note;
}
インスタンスの具体例…
・Webページの更新履歴 (date=2005-07-06, note="ギャラリーにCGをアップしました")
・スケジュール (date=2005-07-13 18:30, note="会議室にてミーティング")
・アクセスカウンタ (date=2005-07-11, note="34")
はじめは Schedule っていうクラス名だったのですが、
上に挙げたように後々になっていろいろな応用例が出てきたので、
別の名前に変えたいと思っています。
「ある時間と、その時間に関連づけられた情報を表すデータ」という意味を表すような
よさげな名前って何かありませんでしょうか?
0572nobodyさん
2005/07/11(月) 06:50:28ID:OE7FRRXhほざくよな・・・・そんなの知らなくても、十分食っていける
俺はしらないが、職業プログラマとして食ってるぞ。
かっこつけたがるんだよな、そういうの使ってさ
0573nobodyさん
2005/07/11(月) 06:55:56ID:???こんなスレもあるが
クラス名・変数名に迷ったら書き込むスレ。Part5
http://pc8.2ch.net/test/read.cgi/tech/1109330204/
0574571
2005/07/11(月) 07:15:14ID:???Notation というのはどうだろうか?
0575nobodyさん
2005/07/11(月) 13:06:05ID:???nodame
0576571
2005/07/11(月) 14:27:29ID:???0577nobodyさん
2005/07/11(月) 16:41:59ID:???0582nobodyさん
2005/07/11(月) 23:54:30ID:???これ真理。
0585nobodyさん
2005/07/12(火) 09:35:21ID:???0588nobodyさん
2005/07/13(水) 02:00:38ID:???>>576のリアクションができて意味不明もないと思うが
>>586と一緒に>>587の友達になるべきだな。
0589nobodyさん
2005/07/13(水) 22:16:27ID:???再生成は防げるやん。
class hoges{
function & hoges () {
static $done = NULL;
if ($done){
trigger_error("既にありんす");
exit;
}
$done = TRUE;
}
}
0590589
2005/07/13(水) 22:17:35ID:???0591nobodyさん
2005/07/14(木) 03:49:28ID:???再生成を防いだってSingletonにはなりませんな。
PHP4では無理。
$x = new hoges();
$y = $x; // アチャー
命名規則とかこじつけて、>>570の言うように「注意する」しかない。
実体の保持方法も微妙なとこだな。
考え付く限りでは、ゲッターの中で静的変数を宣言して入れとくくらいかな。
function & getInstance() {
static $instance = null;
if (! $instance) $instance = new hoges(); // コンストラクタは>>589を使うとしますか
return $instance;
}
しかしこれでは外部で先にnewされてた場合、今度はgetInstance内のnewがエラー吐くね。
結局newしないように注意するしかなくなってしまう。
そうなると再生成を防ぐコンストラクタも役に立たないな。
残るは苦肉の策でグローバル変数に保持か・・・。
0592nobodyさん
2005/07/14(木) 05:07:14ID:???ここでSingleton使ってますよという明示的な記述はできるでしょ。
言語仕様でしょうがない所は別のやり方でカバーしろよ。
0593nobodyさん
2005/07/14(木) 05:42:25ID:???まあ他の言語でもいえることだけど。
0594591
2005/07/14(木) 06:20:14ID:???> PHPの場合Singletonに強制力は持たせられないけど、
そうだね。漏れの話の論点はそういうこと。
> ここでSingleton使ってますよという明示的な記述はできるでしょ。
当たり前だね。
> 言語仕様でしょうがない所は別のやり方でカバーしろよ。
言われなくてもしますが。
0595nobodyさん
2005/07/14(木) 06:33:34ID:???0596nobodyさん
2005/07/14(木) 23:10:54ID:???メソッド内でgetInstanceする?
コンストラクタでプロパティーとして保持しておいて
以後そこ経由でアクセスする?
どっちがいいんかな。
0597nobodyさん
2005/07/15(金) 00:47:11ID:???SingletonのgetInstance内で、
$instance =& new ClassName();
と書いた時、Singletonにならないことを発見しました。
どういう原理でこうなるのでしょうか?
通常new時には&は付けてはいけないのでしょうか?
0598597
2005/07/15(金) 00:50:30ID:???一体なにゆえ…
0599nobodyさん
2005/07/15(金) 01:44:09ID:???リファレンスは静的に保存することはできない。
http://www.php.net/manual/ja/language.variables.scope.php
0600597
2005/07/15(金) 07:23:40ID:???なるほど…。PHPのリファレンスはエイリアスみたいなものだから、
異種な入れ物である静的変数とイコールにはできないということですかね。
ありがとうございました。
0601nobodyさん
2005/07/29(金) 19:03:11ID:???$self->書き忘れでいつもバグが発生するのは漏れだけ?
0602nobodyさん
2005/07/30(土) 00:08:49ID:???0603601
2005/07/30(土) 00:18:51ID:???思ったとおりに動かない、という人為的なバグがおきるんだけど。
0606nobodyさん
2005/07/30(土) 02:28:57ID:???OOP云々の問題じゃねえよ
0609nobodyさん
2005/08/21(日) 20:39:39ID:R+xir7FSそれを指定しておくのがよさげ。
0610nobodyさん
2005/08/21(日) 23:44:39ID:???エラーとして警告されるという諸刃の剣。
0611nobodyさん
2005/08/22(月) 15:45:30ID:???そういう互換性保ってるスクリプトは全部E_STRICTでは通らない。
0612nobodyさん
2005/08/22(月) 17:30:30ID:???結局E_STRICTは表示しないようにした
0613nobodyさん
2005/08/23(火) 13:54:53ID:???って分けてるんだけど
どこまでをDAOに入れるか、
どこまでをロジックに入れるか結構迷うなぁ。
そういうとこないですか?
0614nobodyさん
2005/08/23(火) 16:17:26ID:???PofEAAを原著で読むか、邦訳「エンタープライズ アプリケーション
アーキテクチャパターン」を読めばそのあたりの区切り方はわかってくるかも。
とりあえずは以下のWikiのTableDataGatewayとかActiveRecordとかを
読んでみては?
ttp://capsctrl.que.jp/kdmsnr/wiki/PofEAA/
0615nobodyさん
2005/08/23(火) 18:54:21ID:???ありがとう 参考にします
ちょうどJ2EEパターンの本買ってきたとこ
はっきり言ってPHP周辺の知識だけで
モダンなOOPを理解するのは不可能に近いね
0616613
2005/08/24(水) 03:22:41ID:???複雑な検索をする場合はValueListHandlerを間にかませて
キャッシュした結果セットに対して検索かけるのが流儀みたいだね…
ってPHPでそこまでやる人いるのか??
ムズカシス
0617nobodyさん
2005/08/24(水) 20:18:29ID:/VK1IBL20619nobodyさん
2005/08/24(水) 23:33:02ID:zsqtWDV8その改造内容というものは、Aサイトで開催している箱庭からBサイトで開催している箱庭にコマンドが実行できるようにするものです。
AサイトでBサイトの島にミサイルを打てたり、食糧援助をできるようにしたりできたら面白いものができると思うんですね。
しかし、私にはアイデアだけでそれを実現する力があまりません。
どうかプログラムが出来る方、これを実現していただけないでしょうか?
以上、宜しくお願い致します。
0621nobodyさん
2005/08/24(水) 23:38:34ID:zsqtWDV8私はここにしか書き込んでいませんのでコピペではありません。
0623nobodyさん
2005/08/25(木) 00:16:12ID:???Perlで擬似的にそういう要素を実装したものはコレ
http://bya.lib.net/yk_/index.html
0624nobodyさん
2005/08/25(木) 00:56:18ID:???受け取り側が処理すれば良いだけだし。
0625nobodyさん
2005/08/25(木) 13:04:09ID:???受け側のDB直接叩けるようにした方が確実だよね。
DB使ってない&セキュリティの問題でこのケースじゃ無理だけど
0626nobodyさん
2005/08/25(木) 21:33:57ID:???ココにも書き込みさせて頂きます。
実はPHPについて私自身今から勉強しても
かなりの時間がかかるかと思いまして、
って言うか多分無理に等しいと思い、
どなたか親切な方に小規模なシステムを製作
して頂きたいのですが、ダメでしょうか??
勿論報酬は致します。交渉させて下さい。
もしやって頂ける方おられましたらお願いしたいのですが?
ノークレームと言う条件で構いませんので!!
詳しい内容はやって頂ける方がおられましたらご説明
致しますので、宜しくお願いします。
0627nobodyさん
2005/08/25(木) 21:41:06ID:???0628nobodyさん
2005/08/25(木) 21:44:41ID:???楽天ビジネスとかに投げたら見積もり結構もらえるよ
0629nobodyさん
2005/08/25(木) 21:48:06ID:???[email protected]
0630nobodyさん
2005/08/25(木) 22:12:38ID:???PHPを使ってWebアプリを作ることによって
ソフトウェア工学の基礎を学ぶという
授業があった。取らなかったけど。
0631629
2005/08/25(木) 23:21:52ID:???法人なら yahoo.co.jp なアカウントからメールを送るようなことしないと
思うんだが、世間一般の常識から考えてどうなんでしょう。
0632nobodyさん
2005/08/25(木) 23:23:39ID:Kc8uytHF>>629
お返事有難う御座います。
>>629さんにはメール送りました。
>>627さんで出来ればメール下さい。
[email protected]です。
メール頂けたらシステムの説明と料金の方お伝え致します。
宜しくお願いします。
0635629
2005/08/25(木) 23:29:45ID:???0636nobodyさん
2005/08/25(木) 23:33:22ID:Kc8uytHFやっぱり無理ですか??
一応ある程度はHPの製作会社に依頼したのですが、
システム部分となると、値段が張りすぎて・・・
これから立ち上げようと思ってるサイトなんですけどね。
0637nobodyさん
2005/08/26(金) 01:18:29ID:???同じように勉強中の人たちで勉強をかねて。
面白そうだったら私もやりたい。
0638nobodyさん
2005/08/26(金) 01:43:57ID:???0639nobodyさん
2005/08/26(金) 02:07:20ID:???レベルが極めて低い。
0640nobodyさん
2005/08/26(金) 05:30:11ID:Pl5RTNiw確かにオープンソースで共同開発するのもいいとは思うんですけど、
結構お金掛かってまして、実際は既に170万円くらい掛かってます。
そろそろ予算がオーバーしそうなので誰かに協力してもらおうと思って!
ここらで公開してしまうと、いくら「著作権あります」と歌っても、
無いに等しくなるし・・・特に今回私が立ち上げようと思ってるサイト
は確実に収入になってくるのでオープンソースでの開発は難しいかと思
います。偉そうな事言ってすいませんでした。
0641nobodyさん
2005/08/26(金) 05:40:31ID:???なんか黎明期のネットゲームのような印象しかなかったんだけど
0642nobodyさん
2005/08/26(金) 10:40:52ID:???どの学生が、使える人間かどうかの評価に関しては、
当該無知な雇い主さんには無理かもね。
0643nobodyさん
2005/08/26(金) 11:27:43ID:???$.hoge ← これぐらいの長さにしてくれよ・・・
0644nobodyさん
2005/08/26(金) 12:21:52ID:???0647nobodyさん
2005/08/26(金) 12:26:55ID:???0649nobodyさん
2005/08/26(金) 12:42:51ID:???0653nobodyさん
2005/08/26(金) 13:54:20ID:???当該人物が、顔を真っ赤にしていたとして、この議論には何ら関係ありませんが。
0654nobodyさん
2005/08/26(金) 14:52:34ID:???何かに対しての混同を避けるためだと思うけど、その何かとは何?
0656nobodyさん
2005/08/26(金) 15:19:31ID:???パフォーマンスも上がるだろ。
0658nobodyさん
2005/08/26(金) 17:15:30ID:???0659nobodyさん
2005/08/26(金) 17:38:13ID:???0661nobodyさん
2005/08/26(金) 18:28:00ID:???0662nobodyさん
2005/08/26(金) 23:12:41ID:???exit;
$exit;
$some_func();
some_func();
print(abc);
print($abc);
どれも$のあるなしで挙動が違うだろ。あと、$なし言語は
print "abc $def ghi";
みたいな真似ができない。
>>655
えーっと、そこは笑うところなのか?
>>656
パフォーマンスの問題じゃないと思うが……。
0663nobodyさん
2005/08/27(土) 09:43:05ID:???今はJavaの真似を中途半端にしてるけど
0664nobodyさん
2005/08/28(日) 09:27:12ID:BIgcJ0fJ0665nobodyさん
2005/08/28(日) 10:57:46ID:???しているとすれば
する/しないの境界はどこ?
0666nobodyさん
2005/08/28(日) 11:23:32ID:???通常はする必要なし。
0667nobodyさん
2005/08/28(日) 11:59:04ID:???さんくすちんぽ
0668nobodyさん
2005/08/30(火) 10:18:32ID:???パフォーマンスは関係ない気がする。
あると主張するなら字句解析や構文解析のどういう部分でメリットがあるか
理由を説明して欲しい。
awkとかpythonとか$の必要ないスクリプト言語は現にあるし
それらと比較しても特に$にメリットがあるわけじゃない
php は perl の真似をした
perl は sh の真似をした
それ以上でもそれ以下でもない
0669nobodyさん
2005/08/30(火) 10:50:09ID:???> あと、$なし言語は
> print "abc $def ghi";
> みたいな真似ができない。
変数の文字列埋め込みなんてフォーマッティングや文字列連結で代替できるじゃん。
0670nobodyさん
2005/08/30(火) 12:38:03ID:???ぱっと見分かりやすいからだろ
0671nobodyさん
2005/08/30(火) 13:11:54ID:4hyOkdNt>$なし言語は
>print "abc $def ghi";
>みたいな真似ができない。
そういうメリットを主張する割には
defineで定義した名前は""内で使うことができないんだよな。
この辺のいいかげんさがPHPの特徴。
0672nobodyさん
2005/08/30(火) 21:44:33ID:???俺もそう思う。機械にとってどうって事じゃなくて、人にとってどうかだと思う。
ただでさえ素人(俺含む)が多いPHPerにとって、ぱっと見「あ、これ変数ね。」って思えるのは結構重要だと思う。
0673nobodyさん
2005/08/30(火) 22:05:46ID:???まぎらわしいんじゃボケ!
0674nobodyさん
2005/08/31(水) 12:00:09ID:???php は perl の真似をした
perl は csh の真似をした
cshはshの真似をした
の方が正確ではない?
>>669
> 変数の文字列埋め込みなんてフォーマッティングや文字列連結で代替できるじゃん。
TMTOWTDI。
それらに比べてタイプ量が少なく済み、見通しがいいのは充分メリットだと思うが。
>>671
> defineで定義した名前は""内で使うことができないんだよな。
そりゃそうだろ……。""の中の[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* を全部パースするのか?
第一""内で使えなくて困る場面なんてそんなにあるか?
0675nobodyさん
2005/08/31(水) 12:29:45ID:???0678nobodyさん
2005/09/02(金) 05:16:07ID:???interfaceで定義したいんだけど
Javaのstatic final変数と違ってconstが使い物にならず。
PHPでJavaのstaticイニシャライザ、インスタンスイニシャライザを
真似することは不可能なんだろうか?
static メソッドを定義してSingletonパターンでなんとか
誤魔化してやるしかないんだろうか。
0679nobodyさん
2005/09/02(金) 05:18:08ID:???$をつけた理由はテンプレートとして使いたいからかと思われ。
Java用テンプレートエンジンJakarta Velocityは
テンプレート変数は$で始まるようになっている。
0680nobodyさん
2005/09/02(金) 05:23:22ID:???> >>654
> exit;
> $exit;
>
> $some_func();
> some_func();
>
> print(abc);
> print($abc);
>
> どれも$のあるなしで挙動が違うだろ。あと、$なし言語は
>
> print "abc $def ghi";
$がつくものとして上にあげたJakarta Velocityのようなテンプレートエンジン
として使うメリットはあるが、$なし言語でも
正規表現などが盛り込まれた関数や特殊な関数を使えば
その手の再現は簡単にできる。
JavaのTextFormatというクラスを思い出した。
あれを使い、かつリフレクションAPIを使えば、文字列中に$が現れたら値に変換してから表示する
というメソッドを作ることもできる。リフレクションは重たいけど。
0681nobodyさん
2005/09/02(金) 05:30:42ID:???これはまずい。
PHPはデフォルトでは配列は値渡しなのか?
Javaやりすぎて、デフォルトでは
配列やオブジェクトは参照渡しのみであり、基本型(プリミティブ型)のみ値渡し
であってこともあり、
PHPでは値渡しなどもできることを忘れていた。
やばい、バグが。
PHPではメソッドの引数にはC/C++のように値渡し参照渡しの設定はできないんだろうか?
Javaでは上と同じように、プリミティブ型のみ値渡しで
他(オブジェクトと配列)は参照渡し。
どうしても値渡しをしたい場合はObject#clone()を使ったり、オーバーライドしたりする。
PHPにはJavaのObject#clone()メソッドに相当する機能cloneもあるんだね。
これでPHPで深いクローニングができるわけか。
0682nobodyさん
2005/09/02(金) 05:33:03ID:???インタプリタ言語としてつかうならそうだけど、
JavaやC#のようなコンパイラ言語でかつ、VM上でさらにJITコンパイラによって
中間言語をさらにその場でコンパイルするような言語だと
それは最初の開発者によるコンパイルで最適化されるから
どうでもいいような気がする。
Zendエンジンなんてものもあるけど、タダで使えればねえ。
0683nobodyさん
2005/09/02(金) 07:20:11ID:MBSmrOidごめん、何が言いたいかよく解らん。。
取り敢えず疑問は解決したの?
0684nobodyさん
2005/09/02(金) 09:20:10ID:???歴史的に見れば、裸の文字リテラルや予約語と衝突しないのが当初の目的でしょ。
shで裸の変数を許したらコマンドや引数はどうやって指定すりゃいいんだ。
あとは$があるとパーサが変数かどうかの判定に困らないので、文法の幅が広がる。
phpのexitみたいな括弧なしの言語構造や、Perl関数の戻り値にスカラが指定できるような
芸当は$なし言語だと厳しいでしょ。
0685nobodyさん
2005/09/02(金) 09:22:02ID:???0686nobodyさん
2005/09/02(金) 11:57:33ID:???> PHPはデフォルトでは配列は値渡しなのか?
値渡しだけど、配列の要素を書き換えない限り、内部的には配列はコピーされないのでパフォーマンス的には参照渡しと同じ。
文字列やオブジェクトも同様。
> PHPではメソッドの引数にはC/C++のように値渡し参照渡しの設定はできないんだろうか?
&をつければ参照渡し。その点はC++に似てる。
C++では配列ならC式の参照渡し(アドレスの値渡し)で十分だけど。
とりあえず疑問文にだけコメントしといた。
0687nobodyさん
2005/09/03(土) 00:10:51ID:???0688nobodyさん
2005/09/03(土) 09:36:19ID:JcQXpRDzたとえば。クラスtest,
メソッドtest($t){$this->t}と定義した場合
$test= class test;
でメソッドのひきすうに10を渡した場合
$test->test(10);
これでなにも表示されないんですね・・・なんかつかいずらい
いちいちメンバーを定義して
public $tみたいに・・・めんどくせえ・・・
0689nobodyさん
2005/09/03(土) 10:52:27ID:???public $t;書いてもそのままじゃ何も表示されないとおもうけど。
echoはないわ、$this->tに値いれてないわ。おかげで主張の内容がさっぱりわからん。
まずどの言語から移行したわけ?メンバ定義なしでメンバを使える言語ってまさか・・・?
0691nobodyさん
2005/09/03(土) 12:22:13ID:???php5では
function __construct() { }
が優先される
<?php
class test {
function __construct() {
echo "testクラス作成<br>\n";
}
function test($t) {
echo $t;
}
}
$test = new test();
$test->test(10);
?>
こんなことも出来る
0692nobodyさん
2005/09/03(土) 16:19:09ID:???__construct()が優先されるけど、書いてないならこの場合test($t)が呼ばれるよ。
んで、インスタンス化した際に引数つけてないとWarningがでる。
>>688で書いてる、
$test= class test;
って書き方初めて見たのだが、それエラーするだろ?
それとも俺はPHP5しか知らないのだけど、4ではその書き方出来るの?
0693nobodyさん
2005/09/03(土) 16:46:21ID:JcQXpRDz俺がいいたかったのは
class test;
{ pubclic funciton tes($a);
{
echo($this->a);
}}
で
st= new test();
ここでメソッドをよびだした場合
st->tes(10);なにも記述しなてくて
つまりメソッドの場合$this->aってできないんだな
public $a; $this->a=$a
みたいな・・二度手間だな・・・まぁいきなり$aならこれでも表示するんだが
本みるとこの二度手間をしてる・・
0694nobodyさん
2005/09/03(土) 16:47:21ID:???> $test->test(10);
と書いているので、コンストラクタの話題を意図していたわけじゃないんだろうけどな。
>>692
> 4ではその書き方出来るの?
んなわきゃないw
PHP Parse error: parse error, unexpected T_CLASS in (ry
極めて真っ当なエラーですな。
0695nobodyさん
2005/09/03(土) 17:01:56ID:???その本で何を解説してるのか知らないが、大方
・プロパティ名とメソッドの引数名は同じでも問題なし
・public $a と $this->a の「a」は同じ変数を表すが tes($a) の「a」は全く別の変数
ってな感じの内容じゃないの?
どこが二度手間なわけ?
0697nobodyさん
2005/09/03(土) 18:15:04ID:JcQXpRDzてことは
クラスの中に
メソッド pubulic funciton hell($a){ echo($a."さんこんにちは");}
こういう使い方はできるんだね。現にやったらできたけど
なんかPHP5の本ではさやたら$this->
って感じでやってるから。
PHP5の本どうでもいいけど少なすぎ><
0698nobodyさん
2005/09/03(土) 18:18:07ID:JcQXpRDz本ではさ
public $a;
pubulic funciton hel($a){
$this->a=$a
echo($this->a."さんこんにちは")}
みたいな使いかたをしてたから
なんでこんな二度でまをふんでるんだろうかと
本がわるいのかもしかして
0699nobodyさん
2005/09/03(土) 18:22:35ID:JcQXpRDz俺みたいなやつの質問にこたえてくれて
会社でPHPつかえるやついなくてな、皆javaばかりで
おれだけPHPだから肩身せまくてな
これからもよろしくたのむよ
0700nobodyさん
2005/09/03(土) 18:53:52ID:???$aをメソッド内のローカル変数として使いたいのか
それともフィールド変数として他のメソッドからも使いたいのか
どっちが目的なのかわからん。
0701nobodyさん
2005/09/03(土) 19:00:47ID:???この程度の内容にPHP4、PHP5、Javaで違いはないんだが(書式以外で)。
オマイがカスすぎて他の社員から相手にされてないだけではないのか。
0702nobodyさん
2005/09/03(土) 19:15:26ID:???>会社でPHPつかえるやついなくてな、皆javaばかりで
>おれだけPHPだから肩身せまくてな
オマエ、どうみてもPHP使えないだろ? 下手するとPHPだけじゃなくプログラミング自体素人か。
Javaは絶対習得できそうにないからPHPでもやらせとけ、って感じしかしないのだが。
0703nobodyさん
2005/09/03(土) 19:37:49ID:fR+7vSEm本の読み方を間違ってる。
0704nobodyさん
2005/09/03(土) 19:39:05ID:JcQXpRDzもともと営業ではいったからな
プログラミング歴は3週間目だ。
これで月給38万ももらってていいのか。
0705nobodyさん
2005/09/03(土) 20:12:15ID:???営業で入ったにしても日本語が下手すぎるね。
まぁ給料貰えるうちに頑張れ。
なんでthisを多用するかって事だけど、先の例だと
setterっぽく使いたかったのかな?変数publicだけど・・・。
その本を読み進めて行くと、多分その疑問は解凍されると思うよ。
0706nobodyさん
2005/09/03(土) 23:51:44ID:???インピーダンスミスマッチについてどうお考えですか?
仕事でPHPでオブジェクト指向で進めようとしていますが、
PHPの効率のよさはオブジェクト指向ではないやり方によるものだった
ってことはありませんか?
0707nobodyさん
2005/09/03(土) 23:59:36ID:???営業で入って、プログラミング歴3週目で、>>688 で書いている
"最近PHP5に移行したんだが" が激しく一致しない。。。
0708nobodyさん
2005/09/04(日) 01:10:09ID:???3週間前PHP4の本渡されて勉強した後、最近新たにPHP5の本渡されて勉強しはじめたんでないか?
彼の中ではすでに「最近PHP5でクラスを自作しました」とかになっていると思われ。
0710nobodyさん
2005/09/04(日) 03:05:09ID:???いい身分だな。
何も教えてやりたい気分も萎えそうだが
オブジェクト指向を理解していない奴と一緒にソフト開発することほど
ウザイことはないから少しだけ教えてやる。
0712nobodyさん
2005/09/04(日) 03:07:29ID:???PHP5でオブジェクト指向ををやるのに本が少なすぎる?
ならJavaの本を買え。
結城浩の「Java言語で学ぶデザインパターン入門」
これ嫁。これ読めばPHP5で無理矢理オブジェクト指向するよりも
オブジェクト指向は素早くすんなり理解できる。
何と言ってもオブジェクト指向といえばJavaと言われているくらいだからな。
0713nobodyさん
2005/09/04(日) 03:12:09ID:???純粋論者はインスタンスフィールド$aをprivateにすべきだと主張する傾向にあることをよく覚えておけ。
そのときは$aに対するgetter/setterを定義するることをお忘れ無く。
PHP5からは__getや__setなんてものもあるらしいな。
どんなメリットがあるのかわからんので
自力でgetA(), setA($a)を定義してはいるが。
メソッド引数で定義されている$aはローカル変数で
フィールドの$aとは異なる。
そのときの重複を避けるために$this->aという記法を用いる。
0714nobodyさん
2005/09/04(日) 03:14:50ID:???Javaのfinalに相当する最初の一回しか代入を許されない変数を定義できないのだろうか?
でないと不変クラスを作れない予感が。
0715nobodyさん
2005/09/04(日) 03:16:30ID:???機能が強化されてもnamespaceが使えないのが非常に残念だ。
Facadeパターンなどを実現しづらい。Javaですっきりと実現できる
デザインパターンがPHP5ではあまりにも中途半端でアクセス権の管理があまりにも杜撰になる。
0716nobodyさん
2005/09/04(日) 04:32:10ID:???PEARみたいな公式の出すらPHP4との互換性保持のため
ほぼ全てのフィールドがvar宣言。メソッドも同様。
0717nobodyさん
2005/09/04(日) 06:15:04ID:???0718nobodyさん
2005/09/04(日) 08:21:13ID:???無理にJava目指すことは無いんじゃないかな。
OOPを知りつつ、OOPの考え方で
OOPじゃない簡単な実装だってできるだろうし。
0720nobodyさん
2005/09/04(日) 08:27:14ID:???0721nobodyさん
2005/09/04(日) 10:11:49ID:???できるようだが。
ttp://www.php.net/manual/ja/language.oop5.final.php
0722nobodyさん
2005/09/04(日) 17:13:11ID:???PEAR::MDB2というのがあるが、
今ベータ版。
MDB1がPHP4対応であるのに対してMDB2はPHP5対応。
よってこれからのPEARはPHP5によってすべて生まれ変わる。
0723nobodyさん
2005/09/04(日) 17:20:23ID:xhmaGAtHあのーfinalなクラスやメソッドを定義できるのは知ってるんですけどー
やりたいことはfinalなフィールド(メンバ変数、プロパティ、属性)やローカル変数を定義したいんですけどー
constしか使えないんですかぁ?
const CONSTANT = 'aa';
とかはできるんだけどさあ。
const CONSTANT2;
と宣言だけしておいて
コンストラクタで
public __construct(Type $constant){
$this->CONSTANT2 = $constant;
}
と後から代入するってことができないんですけどー
こういうこともできなくて困ってるんですけどー
const CONSTANT3 = CONSTANT2.'連結'
0724nobodyさん
2005/09/04(日) 17:23:35ID:???pulic void doMethod(final Type type){
type = "aa"; //typeはfinal宣言されているので
//あとから代入するとエラーになるように、誤作動防止機能
//として使える。
}
これをPHP5でやると?
pulic function doMethod(constant Type $type){
$type = "aa"; //typeはfinal宣言されているので
//あとから代入するとエラーになるように、誤作動防止機能
//として使える、はずなのだが。
}
見事にエラーですか。
困っちゃったねえこりゃ
0725nobodyさん
2005/09/04(日) 17:24:52ID:???そこでPerl6ですよ。
ParrotVirtualMachineといい、コンパイラといいバイトコードといい
もろJavaのパクリですが。
0726nobodyさん
2005/09/04(日) 21:26:38ID:???Singletonでなんとかならんか?
ってか、phpならそうやって使うのが普通だと思うが?
なぜjavaに拘る.
# finally欲しいなぁ
0727nobodyさん
2005/09/04(日) 21:35:22ID:???同意。
Javaはコンパイル型。PHPはインタプリタ型。
だから同じ書き方・動作じゃないのは当たり前なんだけど。
例えば Javaでいう Interface みたいのを
スクリプト言語に入れるのは、なんか違うよね。
そういうのはコンパイル型の言語で素直にやりなよ、ということ。
0730nobodyさん
2005/09/05(月) 04:03:31ID:???JavaソースをPHP5ソースに変換するツールはおらぬのか?
0732nobodyさん
2005/09/05(月) 22:06:33ID:???いらないんじゃなくて、ナンセンスだってことでしょ。
スクリプト言語なのに、メソッド実装を強制するような事が。
実行時に文字列を読み込んで、
その場でインタプリタがクラス作っちゃうような事もできるのに。
Interfaceみたいのは、別にあっても良いと思うけど。
速度に問題出なければ。
0733nobodyさん
2005/09/05(月) 22:30:28ID:???Java使いがPHPを使う場合、またはPHP使いがJavaを学ぶ為って感じがする。
自分がそうだったし。
PHPでOOPだのDIだのなんだのすると速度的にかなりマイナスだしね。
0734nobodyさん
2005/09/05(月) 22:42:44ID:???静的型付けか動的型付けかということのような気がする。
0735nobodyさん
2005/09/05(月) 23:35:49ID:???0736nobodyさん
2005/09/06(火) 00:39:18ID:???0737nobodyさん
2005/09/06(火) 01:00:02ID:???0738nobodyさん
2005/09/06(火) 01:11:32ID:???0739nobodyさん
2005/09/06(火) 01:17:11ID:???setXXX(), getXxx() を__call()でオーバーロードするとか、そんな感じですかね。
DAO設計するときに役立ちそう。
0740nobodyさん
2005/09/06(火) 03:01:57ID:???dev-mlでもそのへんの改善案を検討しているみたいだけど。
基本的にPHPのマジックメソッドはどれもちょっと抜けてて使いにくい。
0742nobodyさん
2005/09/07(水) 12:48:27ID:???require()が無駄にリストアップされてしまう問題を
__autoload()によって解決できるとおもったらそれできんのかい?
>>740もオーバーライドができないってことは、かなり痛すぎる予感。
Javaの真似をして
とりあえず、すべてのクラスの頂点たるObjectクラスを実装して、
そのクラスにとりあえず__autoload()を
入れておくってか。
以後、すべてのクラスは、継承宣言をする予定がないときは、
かならずObjectクラスを継承するように予定変更する、と。
で、ObjectクラスにはJavaのObjectと同じように、
hashcode(), equals(), finalize(), wait(), notify()などを実装する。
少なくとも、equals()は重要。
Comparableインターフェースなども作っておく。でcompareTo()メソッドも
実装できるように。Cloneable, Serializableインターフェースも。
__autoload()を無理矢理オーバーライドするなら、
これしかないか?
__autoload()を他のメソッドでラップし、そのメソッドをサブクラスオーバーライドする。
でオーバライドしたらまたそのサブクラス内で__autoload()を実装し、オーバーライドした
メソッドを呼び出す。
っていうやりかたはうまくいかんか?
0743nobodyさん
2005/09/07(水) 13:08:31ID:???PHPで多重継承が必要な場面に遭遇したことないけど。
それが>>732の言わんとしてることじゃないの?
>>742
__autoloadのラッパ・・・?それじゃ__autoloadの意味ないじゃん。
ファクトリメソッド作るなら、そのメソッド内でrequireしたほうが話は早いわな。
とりあえず何を主張したいのかが不明瞭。
>>738と>>740への批判みたいなことを言いたいのだろうか?
0744nobodyさん
2005/09/07(水) 16:59:36ID:???多重継承しないように設計すれば良いだけでしょ。
Javaでしかデザインパターンしたこと無いのかも知れないけど…。
0745nobodyさん
2005/09/07(水) 21:56:51ID:???委譲や集約だけに任せるってのかい。
そっちのほうがもっとナンセンスに見えることもないか?
デザインパターンでも多重継承つかったサンプルが沢山あるのに。
それに、オブジェクトをディープコピーできるようになることを示すCloneableインターフェース、
オブジェクトを直列化できることを示すSerializableインターフェース、
これらが使えんだろ。
こういうインターフェースを定義したい場面ってのが結構ある。
あるクラスを継承したいが、すでに他のクラスによって継承されているので
これ以上継承できない、っていうとき、片方のクラスがインターフェースになっていれば助かる。
とくにマーカーインターフェースは使える。
>>732はメソッド実装を強制するためだけにインターフェースを使うつもりでいるらしいが、
マーカーインターフェースはメソッドなんかいらない。
Serializableはメソッドなんか一つもない。まさにクラスにマーカーをつけるかのように
インターフェースを実装できる。
このように、一つのクラスに、継承しながら複数のインターフェースを実装したい場合があるときに、
インターフェースは役に立つ。
デザインパターンの本を良く読んでいるならインターフェースを使ったサンプルはよく見かけると思うが。
インターフェースは便利だから使う。抽象クラスだけでは限界があるとき、
非常に役立つ。
無計画に使いすぎるとインターフェースの乱立が生じてとんでもないことにはなるが。
使い方さえ気をつければ非常に使える。
それから、定数を定義するときもインターフェースをよく使う。
実装はしないがタダ定数を置くだけ。define()を使えという意見もあるが、インターフェース名::定数名
という構文規則が守られちょっとわかりやすくなる。
0746nobodyさん
2005/09/07(水) 21:59:17ID:???インターフェースも使えないのはなにか違和感がある。
ここでクラスだけにしたら、クラスに多重継承させることを許してしまう。
というか、クラスで多重継承ができることを許さないといけなくなる。
そうするとC++のような混乱が生じ、ダイヤモンド継承とかわけのわからんことになる。
だからインターフェースは必要なんだと。
0747nobodyさん
2005/09/07(水) 22:15:56ID:???デザパタは大事だけど、PHP採用してるような現場でそこまで厳密なOOPが必要か?
とも思う。
現状のPHPが中途半端な状態にあるのは分かるけど、
中途半端なら回避すれば良いだけでしょ。
仕事でどうしてもPHP使えと言われていて、PHPの今の実装はこうです。となってる。
デザパタ知ってるなら、その考えを使って、
いま組めと言われている言語にあった、無理の無い設計をするのが普通じゃないのかな。
うまく骨抜きにして言語に合うように実装する。そんだけだろ。
0748nobodyさん
2005/09/07(水) 22:22:32ID:???「プログラミングで注意すべき部分を冗長にマーキングする」でかまわんけどなぁ・・・
ZendEngineにキャッシュが搭載されるのはPHP6からだっけ?
0749nobodyさん
2005/09/08(木) 00:05:46ID:???うむ。「インターフェイスがないと多重継承ができない」とか聞くと違和感覚える。
普段どんなインターフェイスの使い方してるのか気になったりする。
0750nobodyさん
2005/09/08(木) 00:42:45ID:???Adapterパターンとかな。(代替手段として委譲するのもあるがな)
0751nobodyさん
2005/09/08(木) 01:01:24ID:???0752nobodyさん
2005/09/08(木) 02:07:18ID:???ところがそれら作られたものを使う人(クラス)には役に立たない。
0753nobodyさん
2005/09/08(木) 02:38:21ID:???代替って言うか常に委譲の方で良いじゃん。
interface不要って事だ。
0754nobodyさん
2005/09/08(木) 02:49:08ID:???execute()を持つAというinterface
それを実装したクラスB1とB2が有ったとする。
で、利用するコード
$a[] = new B1();
$a[] = new B2();
$a[] = new C1();
foreach ($a => $obj) {
$obj->execute();
}
ここでC1はたまたまexecute()を持つAを実装でないクラス。
PHPはこれでエラーが起きない。
0755nobodyさん
2005/09/08(木) 02:55:41ID:???何をしたいのかも明確にできない。type hintingみたいな機能もあるけど
Javaと違ってmainメソッドを必ずしもクラスにする必要は無いわけだし。
0756nobodyさん
2005/09/08(木) 03:33:10ID:???まあわかってやれよ。こういうことだろ?
interface A { public function execute(); }
class B1 implements A { public function execute() { ・・・ } }
class B2 implements A { public function execute() { ・・・ } }
class C1 /* doesn't implement A */ { public function execute() { ・・・ } }
$a = array(new B1(), new B2(), new C1());
foreach ($a as $obj) $obj->execute(); // interface Aなんて初めからあってもなくても結局変わらん
つまり、PHPのinterfaceはインスタンスの型を制限する役割は全く果たせないってこった。
ただJavaライクな文法があれば、Javaに慣れている人間同士で意思の疎通や理解がしやすくなり、結果的にデザパタも組みやすくなるって面もある罠。
その点では大きな利点といえる。
しかし、飽くまで可読性・保守性に関する利点であって、PHPの言語仕様上の利点ではない。
現にPHPでデザパタは多くの場合、単に「通念的」にしか実装できないことが多いが、その限りでは文法上どんなデザパタもinterfaceなしで実装できることになる。
0757nobodyさん
2005/09/08(木) 08:45:11ID:???まあ PHP 的には以下のようにするのが限界かな。
foreach ($a => $obj) {
if ($obj instanceof A) {
$obj->execute();
}
}
もしくは duck-typing な感じで、
foreach ($a => $obj) {
if (method_exists($obj, 'execute')) {
$obj->execute();
}
}
とか。
0758757
2005/09/08(木) 08:54:45ID:???■$a をコレクションにして Iterator を使った場合
while ループの中で A obj = (A) iterator.next(); とした時に
C のインスタンスが ClassCastException で引っかかる
■$a を A の配列にした場合
配列に C1 のインスタンスを代入しようとした時点でエラー
となるわけで、どっちかっつーと PHP の扱い方のほうが便利じゃない?
0760nobodyさん
2005/09/08(木) 10:46:30ID:???だからその「便利じゃない」って点こそが肝なんだよな、結局。
書けるコードに制限を設けることで意図を明確にできるわけで。
0761nobodyさん
2005/09/08(木) 11:52:57ID:???0762nobodyさん
2005/09/08(木) 13:09:48ID:???インスタンスの型を制限する役割はないといっても
メソッドに引数で制限できるから
インターフェースはわりと使えるもんだよ
0763nobodyさん
2005/09/08(木) 15:49:09ID:???JavaならばC1の書き直し、
状況によってはinterface A自体の見直しも必要になってくる。
AやC1が外部のライブラリならその修正も困難。
(まあ、そのためにAdapterパターンがあるのかもしれないが
Adapterパターンの多用は冗長になるなどの欠点をしばしば指摘される。)
そういう点でPHPのような動的な型付け言語は柔軟性があるのだと思う。
でも>>754のコードが意図的なのかどうかというのを
コメントなしに伝える事が不可能な点が問題。
メソッドの引数で伝えるのは状況が限られる。
柔軟性か信頼性かって事だ。
0765nobodyさん
2005/09/08(木) 18:58:07ID:???0766nobodyさん
2005/09/09(金) 21:00:51ID:TEZpGZnS$this->hoge = "fuga";
って初期化やるのと、
プロパティー宣言部に最初から
var $hoge = "fuga";
ってやるのと、どう違うの?
何となく、プロパティー宣言部に書いておいた方が速い気はするけど
何か問題はある?
0767nobodyさん
2005/09/09(金) 23:19:57ID:???0768nobodyさん
2005/09/10(土) 00:32:17ID:Gaffkz1Oいいことにインスタンスを引数で持ちまわすのではなくて
使うたびにgetInstanceするのって間違ってますか?
0769nobodyさん
2005/09/10(土) 00:34:55ID:???JavaとPHPとその他一部を除く多くのオブジェクト指向言語を否定するわけね。
0771nobodyさん
2005/09/10(土) 00:38:34ID:???おk
>>767
Javaに毒されすぎ。
それはもはやオブジェクト指向じゃなくてクラス指向だよ。
要らないとは言わないし、あると便利な局面があるのも分かるけどPHPとJavaは別の言語なんだから。
>>768
むしろ常套手段かと。
0775nobodyさん
2005/09/10(土) 12:53:29ID:???少なくとも>>741や>>745みたく「Interfaceがないと多重継承ができないからダメだ」とか
言ってる奴にはオブジェクト指向語らないで欲しい。
0779名無しさん@そうだ選挙に行こう
2005/09/11(日) 01:31:18ID:dmsH6X+Kどう実装してる?
1 setPropertyと別に、setPropertiesを作って、可変長引数を受け取る
2 setPropertyと別に、setPropertiesを作って、一つの配列(コンテナ)を受け取る
3 setPropertyを、可変長引数の受け取りもできるようにする
4 setPropertyを、配列(コンテナ)の受け取りもできるようにする
どれが一番いいんだろ?
0780779
2005/09/11(日) 01:36:41ID:???setErrorとsetErrorsを用意して
配列で受け取ってる=2
みたいだけど。
それが無難ですかね。
0781名無しさん@そうだ選挙に行こう
2005/09/11(日) 02:04:57ID:???俺も2かな。
どんなプロパティなのかにもよるけど、3や1もありうる。
4だけは混乱したから使わない。
0782名無しさん@そうだ選挙に行こう
2005/09/11(日) 12:25:07ID:???ものすごく都合よく解釈した広い意味で
0783名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:06:04ID:???非常に嘆かわしいことに、インチキなJavaの入門書には、
「JavaではC++の多重継承の代用品としてInterfaceというものがあります」
なんて、腐りきった解説が今でもあったり・・・ すごく哀しい。
0784名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:08:59ID:???Java登場初期の頃にそう言われていたのは事実。
デザインパターンとかが普及してきてから変わってきた。
0785名無しさん@そうだ選挙に行こう
2005/09/11(日) 16:00:13ID:???昔はそれが常識で事実だったみたいな言い方はよくない。
0786名無しさん@そうだ選挙に行こう
2005/09/11(日) 16:12:44ID:???発想が意味分からないな。
0787名無しさん@そうだ選挙に行こう
2005/09/11(日) 16:34:34ID:???0788名無しさん@そうだ選挙に行こう
2005/09/11(日) 17:19:05ID:???0789名無しさん@そうだ選挙に行こう
2005/09/11(日) 18:43:04ID:???0790名無しさん@そうだ選挙に行こう
2005/09/11(日) 18:46:55ID:???C++だが、参考になると思う。
0791nobodyさん
2005/09/12(月) 19:02:44ID:???$sql = "select * from $table"
みたいに
$sql = "select * from $this->table"
と書いたらエラーになるのってキモくね?
この気持ちをどうしたらいいですか。
0794nobodyさん
2005/09/12(月) 21:17:25ID:???0796nobodyさん
2005/09/14(水) 06:17:54ID:uQ+GcINS(StatementDAO,ThreadDAO等)
結合しなきゃならないケースが出てきた。
結合の場合、DAOってどうすればいいの?
0797nobodyさん
2005/09/14(水) 19:20:52ID:???DAOというよりはDataMapperに近い考え方なのかな。んで、
「さて結合の場合はどうしよう?」ってのがO/Rマッピングの課題の1つじゃなかったっけか。
自分の場合、例えば都道府県名とかあるレコードの属性に関する情報はgetterで結合しちゃってる。
呼び出しを冗長にしたくない場合はgetDetail()なんかのメソッドを作ってそっちを結合専用にしている。
複雑な結合を含むselectが必要な場合は、そのselectがどのテーブルを基にしたものかを判断し、
そのテーブル(用のクラス)にメソッドを追加してる。
0798nobodyさん
2005/09/16(金) 02:45:16ID:???ちょっとまて。
それではclassだけで多重継承ができるという誤解を生むぞ。
A extends B, C, D,E {}
を許す結果になるぞ。
それに>>788は勘違いしている。
それから、>>775は
>>741や>>745が
「Interfaceがないと多重継承ができないからダメだ」と言っていると
勘違いしているがそんなことはどこにも書いていない。
「interfaceがないと多重継承ができない」とは書いてはあるが
それがダメだなんてことはどこにも書いていない。
勘違いしすぎ。だから>>788や>>753, >>727のような誤解をする者が出てくる。
0799nobodyさん
2005/09/16(金) 03:01:56ID:agfKPRSnネタとしてもおかしいぞ。
interfaceを使わずにPHP5で多重継承しようとしたら
こんなメッセージが出たぞ。
Parse error: syntax error, unexpected ',', expecting '{' in C:\Program Files\Apache Group\Apache2\htdocs\PHPTest\src\ExtendedClass.php on line 10
//ClassExtendsTest.php
class ClassExtendsTest {
}
//ClassExtendsTest2.php
class ClassExtendsTest2 {
}
//ExtendedClass.php
require_once("ClassExtendsTest.php");
require_once("ClassExtendsTest2.php");
class ExtendedClass extends ClassExtendsTest, ClassExtendsTest2 {
}
//Main.php
require_once("ExtendedClass.php");
$x = new ExtendedClass();
これでもPHP5でintarfaceがなくても多重継承ができるっていうならそのやり方を説明してくれ。
0800nobodyさん
2005/09/16(金) 03:12:36ID:???PHP5にもメソッドオーバーロード機能があればねえ。
同じクラス内で引数の型と数が異なる同じ名前のメソッドを複数定義できたのに
0801nobodyさん
2005/09/16(金) 03:15:04ID:???>>783のように本が間違ってインチキだのデマまき散らす奴までいるし。
>>786
このコードの意味がわからんのか。interfaceで多重継承している例だ
class A extends B implements C, D, E, F, G{}
だがこのような実装多重継承をするとJavaでもPHP5でもエラーになる。
class A extends B, C, D, E, F, G{}
>>787
そういうことを言う奴がinterfaceがいらないとか浅はかなことを言うんじゃない。
>>788
それはただの単一継承をなんども繰り返しているだけだ。
>>799の例は、
クラスExtendedClassがクラスClassExtendsTestとクラスClassExtendsTest2
とを同時に多重継承しようとしている例だ。だが、PHP5では
classによる多重継承が禁止されているためエラーとなる。
よって、「interfaceでないと多重継承できない」わけだ。
0802nobodyさん
2005/09/16(金) 03:24:27ID:???0803nobodyさん
2005/09/16(金) 03:24:38ID:???0804nobodyさん
2005/09/16(金) 03:27:13ID:???多重継承とは言わないんじゃないか?
何も「継承」はしてないぞ。
0805nobodyさん
2005/09/16(金) 03:31:47ID:???複雑さを取り除くためにわざわざ多重継承を使えなくしてるのに
「多重継承の代用品としてのinterface」を用意する理由があろうか。
頭の固い若者が突然張り切って飛び込んできたという印象を受けるな。
0806nobodyさん
2005/09/16(金) 03:35:09ID:???0807nobodyさん
2005/09/16(金) 03:37:15ID:???extendsとinterfaceの違いをよく考えろ。
interfaceはextendsの代用品じゃない。
783はあくまでも正しい。
0808nobodyさん
2005/09/16(金) 05:01:43ID:???0810nobodyさん
2005/09/16(金) 07:04:08ID:CbtypFEe0811nobodyさん
2005/09/16(金) 09:02:30ID:lrPJbkxRどこらへんがデマ?
いや、マジで。
0812nobodyさん
2005/09/16(金) 09:18:03ID:???> このコードの意味がわからんのか。interfaceで多重継承している例だ
> class A extends B implements C, D, E, F, G{}
勘弁してよ。
C-Gからは、メソッドもプロパティも全く継承していないじゃん。できるわけがない。
C-Gは、インタフェースとしての受け口を決めたというだけで、実体としては空っぽ
なんだから。存在しないメソッドやプロパティを継承できるわけないさ。
なるほど、「インタフェースを継承している」という言い方はできなくもないが、
でも、それはここで話している『C++の多重継承』の『継承』じゃないと思うぞ?
0813812
2005/09/16(金) 09:24:08ID:???C++は、仕様を拡張していく過程でよく考えないまま多重継承を盛り込んでしまって
(最初から多重継承があったわけじゃない)、後で「なんだこりゃ、こんなバカな仕様、
作り直して多重継承は廃止しろ!」という極論まで出て、そのときの大論争の中で、
「そうか、C++において多重継承が有用で、かつそれなしでは実現が困難だと思わ
れる事例というのは、実は単一継承とインタフェースの実装という形で綺麗に
まとめることができるんじゃないか。でも、一度規格に入れてしまったら、もう手遅れ
だよなぁ・・・ orz」と、いうような流れになったのが、10年くらい前のこと。
当時のC++開発者コミュニティの激論は、本にもなっているよね。
その反省のもとにJavaでは、継承とインタフェースを切り分けたわけじゃん。
そこら辺を踏まえたうえで、インタフェースも継承の一種だと主張するなら、そりゃ、
まことにごもっともなんだけど・・・ >>801 って、そこまで考えた上で言ってる?
0814nobodyさん
2005/09/16(金) 09:29:22ID:???自己慢でinterface導入するなら迷惑だぞ。
0815nobodyさん
2005/09/16(金) 09:44:36ID:???0816nobodyさん
2005/09/16(金) 11:13:11ID:???実装すべきメソッド名とそのパラメータ数(arity)
でFA?
0817nobodyさん
2005/09/16(金) 12:03:47ID:N1oYIrfoてかPHPレベルでは設計とかもいらないだろ
俺はいきなり頭のなかにあるプログラムを書いていき
そして、修正し、うまくいかないときはその機能をすぱっと
きりすてる。デザイナーデザインしたやつも、わからないと
消すよ。ぶっちゃけ上司はそれでもわからんからOKでしょ。
0819nobodyさん
2005/09/16(金) 14:17:10ID:???PHPでは型宣言が無いためその恩恵をほとんど受け入れられない。
だから、例えば『PHPでGoFのデザインパターンを使ってみました』
なんてのは大抵のパターンにおいて意味がない。
0820nobodyさん
2005/09/16(金) 14:18:29ID:???何を作るか次第でしょう。
そりゃ単なる掲示板を作るだけなら要らない。
MVCでいうMの部分が複雑なロジックになるなら必要になってくる。
0821nobodyさん
2005/09/16(金) 23:31:16ID:???> >>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:???そんなことはぜんぜんいってないだろと
0824nobodyさん
2005/09/17(土) 00:47:08ID:???さすがにここまで支離滅裂な長文を書いてくれると、苦笑いするしかないな・・・
あはははは・・・
> interfaceにメソッドやフィールド(プロパティ)がないと継承(実装)が使えない
っていう内容を含むレスはおまいが初めてだよ。
0825nobodyさん
2005/09/17(土) 00:59:45ID:???interfaceをimplementsするのは「インターフェースの継承」。
classをextendsするのは「インターフェースと実装の継承」。
812のいう「『C++の多重継承』の『継承』」は、インターフェースを除く「実装の継承」のこと。
だから「全く継承していないじゃん」になるんだが、理解できてないあたり821はC++やったことないだろ?
0826nobodyさん
2005/09/17(土) 02:04:59ID:???んだろうけど・・・ なんだかなあ
0828nobodyさん
2005/09/17(土) 02:39:50ID:???ひしひしと思った初秋…
0830nobodyさん
2005/09/17(土) 14:40:24ID:???しかも嘆かわしいことに、その本の犠牲者も実在していたということだな。
>>828
821は、たぶん、職場で浮いている理由が自覚できないまま、「なぜ自分は
部下や同僚や上司からバカにされているんだろう」と、いつも自分が不当に
扱われていることに悩んでいるのかも知れない。
0831nobodyさん
2005/09/17(土) 15:25:07ID:???↓この一文が勘違いしている証拠。
> なんだから。存在しないメソッドやプロパティを継承できるわけないさ。
0832nobodyさん
2005/09/17(土) 15:31:27ID:???おまえさ
『インターフェース継承』って言葉使わないの
それを略して継承っていうこともあるんだよ。
その程度のことで揚げ足とっておけば自分の無知を隠せるとでも
思ってるのかねインターフェース不要派は。
ようは、PHP5でクラスだけで実装多重継承ができるかどうかって話だろ。
>>812はできるんだと思い込んでいるらしいが>>799でできないとすでに証明されている。
それにもかかわらず>>812はこんな変なことを言って誤魔化している。
> C-Gは、インタフェースとしての受け口を決めたというだけで、実体としては空っぽ
> なんだから。存在しないメソッドやプロパティを継承できるわけないさ。
むしろお前らのほうがアホだろ。
0833nobodyさん
2005/09/17(土) 15:45:30ID:???interfaceのimplements = インターフェース継承
これらを総称して『継承』と定義しよう
そうすればこれまでの話はすべてかみ合う。
●class
実装多重継承できない。実装単一継承のみできる。
abstractであるでないにかかわらずメソッドのオーバーライド可能。
空のクラスも継承できる。
スーパークラスにabstractになっているメソッドがある場合は必ずオーバーライドしなければならない。
●interface
インターフェース多重継承が可能、実装多重継承できない。
インターフェース実装方法はimplementsの後にインターフェース名をカンマで区切って列挙する。
空のインターフェースでも実装できる。それをマーカーインターフェースと呼ぶ。
abstractになっているメソッドをオーバーライド可能。
メソッドに実装を記述することはできない。定義のみ。
フィールドはすべてpublic static final
クラスがメソッドをもつインターフェースを実装した場合はそのクラスにかならず
そのメソッドをオーバーライドしなければならない。
0834nobodyさん
2005/09/17(土) 15:47:05ID:???インターフェースC,D,E,F,Gに少なくとも
何かメソッド、フィールドが無ければ
class A extends B implements C, D, E, F, G{}
と書いてもエラーになると勘違いしている可能性があるね。
0835nobodyさん
2005/09/17(土) 15:48:48ID:???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:???継承はis-a関係が成り立ってないと駄目。
でもJavaはそれを保証する事が言語仕様上では困難。
0841nobodyさん
2005/09/17(土) 17:38:50ID:???これで同じインターフェースを実装している
実装クラス群を同じように扱える。
ところがPHPでは型宣言が無いため
関係ないたまたま同一メソッドを持ったクラスも同じように扱えてしまう
0842nobodyさん
2005/09/17(土) 17:39:47ID:???PHPでは役に立たないということが完全に証明できた。
0843nobodyさん
2005/09/17(土) 17:41:18ID:???デマですね。
0844nobodyさん
2005/09/17(土) 17:43:52ID:???> 継承はis-a関係が成り立ってないと駄目。
> でもJavaはそれを保証する事が言語仕様上では困難。
(゚Д゚)ハァ? 意味ワカンネ。
何で困難になるんだ?
is-a関係を成り立たせるために継承があるんじゃん。
そういうことはJavaでもPHP5でも変わらないんだけど。
0845nobodyさん
2005/09/17(土) 17:45:06ID:???> だからinterfaceを使う。
> これで同じインターフェースを実装している
> 実装クラス群を同じように扱える。
> ところがPHPでは型宣言が無いため
> 関係ないたまたま同一メソッドを持ったクラスも同じように扱えてしまう
(゚Д゚)ハァ?
>>842
> 故にJavaでinterfaceや役に立つが
> PHPでは役に立たないということが完全に証明できた。
(゚Д゚)ハァ?
0846nobodyさん
2005/09/17(土) 17:52:20ID:???継承する側が注意を払わないと成り立たないという意味。
0847nobodyさん
2005/09/17(土) 17:59:29ID:???0849nobodyさん
2005/09/17(土) 18:02:54ID:???0850nobodyさん
2005/09/17(土) 18:19:55ID:???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:???なんでそういう解釈になるかなあ。
interfaceによる実装と多重継承を混同するなっつってんだよ。
>>836
> 「C++のようにPHPでも実装多重継承を許すべきだ」
なんでやねん。
というか誰もinterfaceが不要なんて言ってないような気がするが。
0852nobodyさん
2005/09/17(土) 19:53:28ID:???あまりに無駄な議論だ
0854nobodyさん
2005/09/17(土) 20:18:58ID:???> 「C++のようにPHPでも実装多重継承を許すべきだ」
そんな主張をしている発言はひとつも存在しないんだが・・・
どういうわけか、存在しない架空の脳内発言を勝手に作っておいて、
その架空の主張に反論しようとして、大騒ぎしている人がいるね。
スレが混乱している元凶は、それだ。
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> その程度のことで揚げ足とっておけば自分の無知を隠せるとでも
> 思ってるのかねインターフェース不要派は。
825は、インタフェース不要派じゃないぜ。脳内妄想もほどほどに。
0859nobodyさん
2005/09/17(土) 21:54:30ID:???誤字脱字注意すべし。Syndromeね
interfaceはともかく、try-catchがあるんだからfinallyが欲しい
0860856
2005/09/17(土) 22:00:09ID:???おっと失礼。どこにでも母音を入れてしまう「じゃぱにいずイングリッシュ」でした。
「把握ことなく」も変だ。他人に突っ込みを入れておきながら、自分がこれとは、
お恥ずかしい限り。 orz
0861nobodyさん
2005/09/18(日) 18:29:03ID:???ライブラリを利用するのコードを書く側へのドキュメンテーションに使うんだろうな。
0862nobodyさん
2005/09/18(日) 18:43:30ID:???0863nobodyさん
2005/09/18(日) 20:27:34ID:???この話題、まだやってたのか…。
0864nobodyさん
2005/09/19(月) 01:27:07ID:???このスレの特徴としては、言い合いになったときに話の収拾をつけることを忘れて自己主張する香具師が多いこと。
これじゃまとまるものもまとまらんので、じっとスルーしておくしかないと思われ。
0865nobodyさん
2005/09/19(月) 04:46:51ID:miiafsuDどこで処理してますか?
俺は
DBでエラーが起きる=イレギュラーで致命的な事態が起こっているから
DBアクセスクラスの中から直接エラーページにリダイレクト
にしてるんだけど。
0867nobodyさん
2005/09/19(月) 21:50:22ID:???> >844
> 継承する側が注意を払わないと成り立たないという意味。
んなことPHP5でも同じことだろが。
何いっとんだおめえ。頭悪すぎ
0868nobodyさん
2005/09/19(月) 22:00:31ID:???> >>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:???0872nobodyさん
2005/09/19(月) 22:29:56ID:???俺もそう思うね。
JavaはWebアプリに特化した言語じゃないし、
PHPは大規模Webアプリに向いてない。
PHPでinterfaceを使うような開発状況(?)は限られてると思うし、
多分要らないって言う人は小規模のWebアプリ作成者、
一人で作ってる人とかだと思う。
多人数で開発行ったり、他人にメンテさせたいとか
の場合にinterfaceは効果発揮するんじゃないかな。
と素人の俺がよくわからないまま発言してみる。
0873nobodyさん
2005/09/19(月) 22:47:25ID:???今までにいくつかすでに語られているが、
●ひとつのオブジェクトに複数の型を持たせることができる。
●『具象メソッドをもたない抽象クラス』を宣言できる。
●そしてさらにそのクラス多重継承できる。
●メソッドを持たない、あることを示すマーカーインターフェースを定義できる。
●定数定義専用クラスとして使うことができる。
●デザインパターンのいくつかは、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:???マーカーインターフェースの話を持ち出すことがレベル低いのか。
なぜレベルが低いのかね。
それが説明できなきゃお前こそが根拠もなくただ主観的に判断しているだけの
レベルの低い人間だと見なされるぞ。
0876nobodyさん
2005/09/19(月) 22:55:50ID:???はて、それだけに使うものかな。
インターフェース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を使うメリットのひとつ。
0878nobodyさん
2005/09/19(月) 23:07:58ID:???ついにそれを主張したか。
まあ、それ用いる箇所ではメリットになるわな。
でも結局その方向だと現在の型宣言を省略できるPHPは糞で
全てJavaの仕様が良いんだって事になってしまうと思うんだけどなあ。
0879nobodyさん
2005/09/19(月) 23:08:00ID:???そう思うなら、このケースではどうかな?
抽象クラス 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:???まて、PHPにはget_class()というクラスがある。
型が曖昧とはいえ、Javaのようにスマートにはいかないものの、
型を厳しくする手段はある。
0881nobodyさん
2005/09/19(月) 23:14:34ID:???interfaceがなくても実現できる方法はあるが
それでは柔軟性がない。
とくに>>879のような状態に陥ったら
何が何でもinterfaceを使わざるをえなくなる。
デザインパターンを上手に使うならinterfaceやastract classを上手に使い分けることだ。
0883nobodyさん
2005/09/19(月) 23:24:16ID:???しょっぼ!
0884nobodyさん
2005/09/19(月) 23:32:37ID:???0885nobodyさん
2005/09/19(月) 23:34:52ID:???0886nobodyさん
2005/09/20(火) 01:28:47ID:???「多重継承できないからinterface必要」論に逆戻りかよw
まったく、多重継承にこだわる奴から、Javaでのinterfaceの利点だけつらつら並べる奴から、てめえがinterface使わないからって不要だとか言う奴から。
お前ら適材適所という言葉を知らんのか。
オレは>>870に同意。
PHPはアドホックをひたすら重視した使い捨て言語から始まり、使えそうなものはガンガン取り込み、終いにはOO導入して徐々に規模の大きなWebアプリにも対応できるようになってきた。
良く言えば柔軟性が増してきたし、悪く言えば統一性・方向性に欠けるため扱い辛い。
良くも悪くも多くの場面でPHPは使われてんだから、「必要」か「不要」かの極論をあえて押し付けようとすれば、それはもはや説得ではなくただの言いくるめだろ。
使うべき時に使えばいいし、いらないなら使わなければいい。
必要派の奴らだって世のPHPのごく平均的な規模(測るのは容易ではないかもしれないが)にinterfaceがどうしても必要とは言わないだろうし、不要派の奴らだってinterfaceがあることが害になるとは言わないだろ。
とりあえずちょっとはお互い歩み寄れ。
長文・チラシ裏失礼〜 ノシ
0887nobodyさん
2005/09/20(火) 02:08:35ID:???Javaでのinterfaceの利点が動的型付け言語のPHPでも全て通用するのか?
をきちんと考えるのはPHPにおけるinterfaceの使い道を考える上でも重要でR。
0889nobodyさん
2005/09/20(火) 03:54:32ID:???このスレの参加者の中に、に適切なインタフェースが欠けている人が
いることだけは間違いないな。
ヨタ話、スマソ。
0891nobodyさん
2005/09/20(火) 17:57:00ID:???Xをマーカーにするなら>>861の通りでしょ
>こんな感じになると嫌でもinterfaceを使わざるをえなくなる。
これだってコメントアノテーションで代替できないこともない
型を縛りたいときはタイプヒンティング、is_a()が必須
interface不要とは言わない(むしろ歓迎)が、用法・用量・用途を良く考えないと
不要なインターフェース、不要な継承を量産することになるぞ
0892nobodyさん
2005/09/20(火) 19:59:52ID:???そういう変化はないみたいだな(*゚д゚) 、ペッ
0893nobodyさん
2005/09/20(火) 20:09:48ID:???Javaで当たり前のことをようやく真似するだけ。
0894nobodyさん
2005/09/20(火) 20:33:07ID:???0895nobodyさん
2005/09/20(火) 20:45:05ID:???0896nobodyさん
2005/09/20(火) 21:08:22ID:???バージョン変えるほどかとも思うけどなぁ
ちょっと期待しすぎたか
0897nobodyさん
2005/09/20(火) 21:26:57ID:???次のPHPに求める動的言語っぽい機能ってなんだ?動的なメソッド追加とかクロージャとか?
そうすると今度はRubyの猿真似とか言われそうだけどな
他の言語のいいとこ取りでいいと思うんだけどな
C#やDelphiのプロパティとか言語仕様で欲しい
0898nobodyさん
2005/09/20(火) 21:27:17ID:???Javaの真似するだけならもうある意味完成だろ。
動的言語であるなどの手軽さを活かしていろいろ考えてほしいのに
PHPの中の人たちは誰もそれをしない。
0899nobodyさん
2005/09/20(火) 21:56:26ID:???積極的にシェアをとっていくための立派なマーケティング戦略なんじゃないか?
と思ったがやっぱ天然かも知れん。
0900nobodyさん
2005/09/20(火) 22:02:42ID:???( ´A` ;) * ('A`)>
/( )\ → <( ) *
| | | >
before after(でもモテない)
0901nobodyさん
2005/09/20(火) 22:56:16ID:???というか、ネームスペースはPHP3あたりですでに実装して欲しかった機能だよ。
0902nobodyさん
2005/09/21(水) 14:21:59ID:???こんなところで、日本語でべらべら語って、どんな結論を出しても
PHP6やPHP7に盛り込まれる可能性はゼロだよ。
議論ゴッコをして遊んでいるだけ。
0904nobodyさん
2005/09/21(水) 16:17:21ID:???いっぺんPHP5が出る直前でなんか問題があってZeevが却下したんだっけ。
で、今のHEADへのパッチはそれに対するアプローチが施されているとか。
MLヲチしてるとZendの人たちはPHPらしさを完全に見失ってる感じがするね。
Python 3.0(これも基本の文字列型がUnicode対応になる)が面白そうな感じ。
0905nobodyさん
2005/09/21(水) 17:32:02ID:???何をやるにしてもJavaやSun、IBMの後追いなんだよな。
0906nobodyさん
2005/09/21(水) 20:31:51ID:???0908nobodyさん
2005/09/26(月) 01:24:35ID:???Parrotか。
Perl6のように大変化される...
なんてことはないか。
# 誰かhaskelでphp6書いて
0909nobodyさん
2005/09/29(木) 05:06:49ID:???0911nobodyさん
2005/09/30(金) 22:38:35ID:???直接いじりとゲッターいじり混ぜて書いてたら
だんだん分かりにくくなってきたorz
0914nobodyさん
2005/10/01(土) 00:29:07ID:???でぐぐっても0件だぞ
適当なこと言ってんじゃねーぞチンカス
0915nobodyさん
2005/10/01(土) 01:23:40ID:???0916nobodyさん
2005/10/01(土) 03:35:40ID:???0917nobodyさん
2005/10/01(土) 10:48:50ID:???俺の場合直接プロパティをいじるなんてことはほとんどなくて
セッター・ゲッター作ってる。
逆に直接プロパティをいじらせたほうがいい時ってどんな時?
0918911
2005/10/01(土) 16:12:26ID:???ただ値を入れる/返すだけのセッター/ゲッターは
書くのが無駄のような気がして、
直接いじりで書いてた。
利点は、書く時に楽、それだけかな。
ただ最近は、書く時の楽さと保守性はトレードオフの関係にあると
身をもって理解してきたよ。
あー、あと、「パフォーマンスがもったいない気がする症候群」
これが害悪だったかもしれない。
よく考えたら、アクセサメソッドによるパフォーマンス低下なんて
本質じゃないよなぁ。
カリカリチューンの最後の最後にいじるべきようなところで、
そこまで行くことは現実的じゃないかも…。
0919nobodyさん
2005/10/01(土) 22:50:19ID:???C#なわけだが。
0920nobodyさん
2005/10/02(日) 09:31:05ID:???Delphiなわけだが。
0921nobodyさん
2005/10/02(日) 17:35:06ID:???__get()と__set()がprivateなプロパティをオーバーロードしてくれればPHPでもその辺自前で書けるんだけど
5.1から全てのプロパティをオーバーロードしてくれるようになるんだっけ?
0922nobodyさん
2005/10/09(日) 16:26:37ID:???0923nobodyさん
2005/10/12(水) 23:20:16ID:ghyx5VqDfindメソッドなんかでは全カラム読んでるんだよね。
一カラム欲しいだけのためだけに全カラム読むのはもったいないし、
欲しいカラムを指定する方がいいんでないかと思うんだけど
どうなんだろう。
全カラム読むのが定石なのかな?
一カラムだけ必要になることも、
そんなに頻繁にはないっちゃ、ないけど。
みんなどうしてる?
0924nobodyさん
2005/10/13(木) 01:41:49ID:???ちょっと違うかもしれないが、この辺読んでみるとか。
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?DomainLogicAndSQL
0925nobodyさん
2005/10/13(木) 02:10:05ID:???何を意味してるの?
こういうの
↓
public class hoge{
}
0926nobodyさん
2005/10/13(木) 02:26:37ID:???0927nobodyさん
2005/10/13(木) 03:00:03ID:???0928nobodyさん
2005/10/13(木) 10:14:22ID:???0930nobodyさん
2005/10/13(木) 13:41:06ID:???0931nobodyさん
2005/10/13(木) 14:41:44ID:???0934nobodyさん
2005/10/13(木) 17:34:41ID:???見つけた
つまり「パッケージ」がないPHPでは意味がないってことだね。
0935nobodyさん
2005/10/13(木) 17:47:57ID:???0936nobodyさん
2005/10/13(木) 18:29:30ID:???0937nobodyさん
2005/10/13(木) 18:34:37ID:???クラスにできるのは abstract/final で継承の強制/可否を指定することだけ。
0938nobodyさん
2005/10/13(木) 19:51:28ID:???0939nobodyさん
2005/10/13(木) 20:36:51ID:???0940nobodyさん
2005/10/13(木) 23:45:51ID:Z/1bajsFConnectionクラスを作ってもらえませんか?
0942nobodyさん
2005/10/14(金) 17:22:40ID:???アクセラレータ入れて共有オブジェクト作るとか?
0943nobodyさん
2005/10/14(金) 23:16:31ID:???コネクションプーリングっているんかな?
0944nobodyさん
2005/10/27(木) 17:37:47ID:???初めは良スレになることを期待していたが、結局低レベルな煽り合いばかりで何も実らなかったか。
そういう漏れも、内容のないレスにムキになって反論したこともあった。
むしゃくしゃしてやった。今は反省している。
おい、おまいら。次スレとか立てるなよ。
結果は目に見えているからな。
というわけで、最後に言わせてくれ。
・・・ぬるぽ
0945nobodyさん
2005/10/27(木) 18:39:46ID:???ガッーーー!
次スレぐらいあってもいいんじゃないか。
低レベルだとしても語るところは欲しいし
てことで、テンプレかんがえれ>1
0946nobodyさん
2005/10/27(木) 20:12:19ID:???このスレをー
やめへんでー
0947nobodyさん
2005/10/27(木) 20:22:16ID:???もう少ししたら誰か立ててくれよ。
0949nobodyさん
2005/10/28(金) 05:31:27ID:???オブジェクト指向を理解してるようにはとても見えないが
見かけによらないな
0950nobodyさん
2005/10/28(金) 08:07:36ID:???0951nobodyさん
2005/10/28(金) 10:24:08ID:???http://ja.wikipedia.org/wiki/%E5%B1%B1%E5%B4%8E%E9%82%A6%E6%AD%A3
>PCのスキルはもの凄く、情報処理技術者試験合格のためだけに
>専門学校に入学、在学中に第一種情報処理技術者試験
>(現・ソフトウェア開発技術者試験。非常に難易度の高い国家
>試験)に合格。その後学費滞納などの理由で中退。趣味は
>ソフトプログラミング(メインPCのOSはLinux、主にC++言語を使用)。
だそうだ。
0952nobodyさん
2005/10/28(金) 13:42:45ID:???0953nobodyさん
2005/10/29(土) 14:41:17ID:???C言語でいう構造体って便利じゃないですか
このオブジェクト指向と構造体って何か関係がありますか?
0954nobodyさん
2005/10/29(土) 18:56:40ID:???オブジェクト指向では、C言語の構造体の考え方を拡張して、
「構造体ごとに固有の関数を持てるようにしたもの」と言えなくもない。
0955nobodyさん
2005/10/29(土) 21:28:22ID:???0956nobodyさん
2005/10/30(日) 00:31:40ID:???でもC時代のメモリ割り当ての拡張としての構造体とは、概念的にちょっと違う気もする。
よーし、いい加減スレ違いな話題になってきたぞ。
PHPのOOの話題も尽きてきたので、別にどーでもいいんだがw
0957nobodyさん
2005/10/30(日) 01:44:14ID:???ネコやイヌに対するミアキスみたいなもんだよ
0959nobodyさん
2005/10/30(日) 12:14:41ID:???http://ex13.2ch.net/test/read.cgi/gline/1121343081/
0960nobodyさん
2005/11/02(水) 01:00:17ID:???0961nobodyさん
2005/11/05(土) 16:17:15ID:3i8SmZZ/すなおにMVC基本のJavaにしとけってことだ。
Javaほど厳密じゃなくても良くて、ちょっとHTML書けるほどのヘタレを大量に集めて物量で凌ぐのにしかPHPは使えない。
個人でちょこっと作るにしても最初からフレームワーク覚えた方が、同じ物の作り直ししなくて済む分効率的。
結局、Cの敷居が高いからBASICで作ってしまうヘタレが、JavaやフレームワークのOOの敷居が高くてPHPで作ってるに過ぎないのが現実。
0962nobodyさん
2005/11/05(土) 21:44:44ID:???Javaだって別にMVC基本な訳じゃなくて、かつてはServletにHTML直書きなんて
スタイルも珍しくなかったけどね。
Javaは厳格すぎて少人数での開発にはおおげさ&面倒くさいから
OOPに抵抗ない奴は今ならRubyにいくだろうな。
0965nobodyさん
2005/11/06(日) 10:46:24ID:???0966nobodyさん
2005/11/07(月) 04:27:01ID:???0968nobodyさん
2005/11/18(金) 20:57:34ID:???0969nobodyさん
2005/11/19(土) 06:11:00ID:???0970nobodyさん
2005/11/19(土) 08:01:36ID:???0971nobodyさん
2005/11/19(土) 10:51:04ID:???0972nobodyさん
2005/11/24(木) 12:22:16ID:???Rails が流行っているとは言え、決定打となるフレームワークがない
という状況が長く続いているのは事実。なんか標準の cgi.rb はちょっと
やだけど、かといって…って感じ。
そこが解決すれば Web にも向くんだが。
今だとロジックは Ruby で書きたいが、インターフェイスは
他ので書きたいって感じになっちゃう。
0973nobodyさん
2005/11/24(木) 16:29:32ID:???0974nobodyさん
2005/11/24(木) 18:17:56ID:???って騒いでるところ
0975944
2005/11/27(日) 20:05:43ID:???本当に次スレ要る?
予想としては、
「OOならJavaがあるじゃん」
「いやRubyでいいよ」
「えーっ!PHPだってがんばってるもん><」
の繰り返しになりそう。
0976nobodyさん
2005/11/28(月) 02:26:56ID:ANoVFrgvなければ無いで、いろんなスレにOO系の話題が時々ふられて
まとまりがなくてウザイので、あったほうがいいと思う。
0977nobodyさん
2005/11/28(月) 04:52:35ID:a54yzRbD0980nobodyさん
2005/11/28(月) 14:18:28ID:???【PHP Perl】Webでオブジェクト指向プログラミング【Ruby Java】
JavaやRubyは最初からOOPLで有利な立場にあるので、あえてPHPとPerlを前に置いてみた。
ASPは漏れ自身がさっぱりなのでどうしたらいいか誰かおせーて。
0981nobodyさん
2005/11/29(火) 03:15:58ID:gl3Jq/2LOOAもダメかもね。
0983nobodyさん
2005/11/30(水) 01:23:00ID:???0984nobodyさん
2005/12/01(木) 10:20:12ID:???お互いに自分の言語での例を出して噛み合ないとかさ。
0985nobodyさん
2005/12/01(木) 10:46:15ID:???ただ、Javaでは何々ができる→PHPは糞、みたいな不毛なやりとりではなく、PHPでこういう工夫をすることもできる、みたいにポジティブな方向に進めば良スレになると思うけどなぁ。
あとWebProg板でOO関連って、このスレともう一つPerlのスレしかないから立ってもいいかなぁという消極的な理由もあったりなかったり。
0986nobodyさん
2005/12/01(木) 11:48:05ID:???この板では立てられないでしょ
0987nobodyさん
2005/12/01(木) 12:08:31ID:J/4v1ewA需要がなかったら沈むだけだし、やってみればいいかと。
俺はいろんな言語統合案に賛成
0988nobodyさん
2005/12/01(木) 12:17:13ID:???これもある
ウェブプログラミングで使えるデザインパターン
http://pc8.2ch.net/test/read.cgi/php/1069451782/
0989nobodyさん
2005/12/01(木) 17:29:58ID:???適当に内容書き変えてもいいんで誰かお願いします。
>>980のスレタイはたぶん長くて入らない
タイトル
Webでオブジェクト指向プログラミング
>>1
サーバーサイドWebプログラミングのOOスレです。
・OOP、MVC、デザパタなどのコンセプト的な話題
・OOにまつわる言語比較(言語批判はその言語で開発してる人に失礼にあたることが多いのでなるべく禁止でお願いします)
・保守、再利用、生産性、開発環境などの実践的な話題
・Webサーバ、DBなどの外部との親和性に関する問題
・学習、教育などの方法論
などなど。
前スレ
PHPでオブジェクト指向プログラミング
http://pc8.2ch.net/test/read.cgi/php/1113724557/
0990nobodyさん
2005/12/01(木) 17:47:39ID:r3P18a2X了解。あと10分たったらたてます。
0992nobodyさん
2005/12/02(金) 07:04:21ID:???荒れそうだなあ。
空気読めない素人が「javaでこれこれはphpではどうしますか?」なんて訊いて、
答え「phpでは無理」なんて返ってきて、
「phpでは何で無理なんですか?」なんて訊いちゃうと、言語戦争勃発。
0993nobodyさん
2005/12/02(金) 11:19:06ID:???Webでオブジェクト指向プログラミング@WebProg
http://pc8.2ch.net/test/read.cgi/php/1133489897/l50
・・・10分たつまえに寝ちまった。
重複になったらやだなと思って時間空けたのが裏目に・・・すまそ。
0995nobodyさん
2005/12/02(金) 18:37:07ID:???0996nobodyさん
2005/12/02(金) 18:42:33ID:???0997nobodyさん
2005/12/02(金) 20:01:39ID:4lCzPlwh生活時間ずれてるんすよ。
今は3時おきとかだし。
ちょっとずつずれていくので17時おきとかもあります。
自営業なんで
0998nobodyさん
2005/12/02(金) 20:46:05ID:???0999nobodyさん
2005/12/02(金) 20:47:10ID:???↓思う存分に1000をゲットしてください・・・
1000nobodyさん
2005/12/02(金) 20:59:52ID:9xIbQhDh10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。