PHPでオブジェクト指向プログラミング
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/04/17(日) 16:55:57ID:iM4mgYnJPHPによるOOPについて語りましょう。
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は非公開プロパティでもいいなとか、後のメンテナンス性を考慮した
実装を考える事ができますね。
■ このスレッドは過去ログ倉庫に格納されています