Webでオブジェクト指向プログラミング
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/12/02(金) 11:18:17ID:lnZM9OlM・OOP、MVC、デザパタなどのコンセプト的な話題
・OOにまつわる言語比較(言語批判はその言語で開発してる人に失礼にあたることが多いのでなるべく禁止でお願いします)
・保守、再利用、生産性、開発環境などの実践的な話題
・Webサーバ、DBなどの外部との親和性に関する問題
・学習、教育などの方法論
などなど。
前スレ
PHPでオブジェクト指向プログラミング
http://pc8.2ch.net/test/read.cgi/php/1113724557/
0002nobodyさん
2005/12/02(金) 11:41:45ID:???ついでにズザー
0003nobodyさん
2005/12/02(金) 11:54:27ID:???PHPとJAVAさぶれっと
http://pc8.2ch.net/test/read.cgi/php/987850713/
オブジェクト指向perl
http://pc8.2ch.net/test/read.cgi/php/1022604696/
ウェブプログラミングで使えるデザインパターン
http://pc8.2ch.net/test/read.cgi/php/1069451782/
【PHP】フレームワークについて語るスレ【総合】
http://pc8.2ch.net/test/read.cgi/php/1123608068/
CGI VS PHP VS JAVA
http://pc8.2ch.net/test/read.cgi/php/1006006800/
Python vs Ruby vs PHP vs Perl
http://pc8.2ch.net/test/read.cgi/php/1124710112/
WEBアプリにもっとも適した言語は何か?
http://pc8.2ch.net/test/read.cgi/php/1130115690/
良質なサイトや書籍など、情報ある人プリーズ
0006nobodyさん
2005/12/02(金) 12:05:33ID:???適宜ム板、マ板に誘導していかないと。
0007nobodyさん
2005/12/02(金) 12:08:49ID:???とりあえず議論がWebプログラミングに関係なくなった時点でスレ違いってことで。
0008nobodyさん
2005/12/02(金) 16:18:39ID:???思ってしまう俺は古い人間なのか?
0009nobodyさん
2005/12/02(金) 16:23:36ID:???0010nobodyさん
2005/12/02(金) 16:36:26ID:???0011nobodyさん
2005/12/02(金) 16:52:18ID:???綺麗にOOが書けません><
プロの方のソースを拝見させてもらうと感動します><
0012nobodyさん
2005/12/02(金) 17:33:27ID:???それは別に Web に限らないからスレ違いなのでは?
むしろ webprog でやらない方が有意義になると思われ
>>11
ごめん、それはどれのこと?
公開されてるやつで、プロが書いたかどうか分かるものってあるの?
0013nobodyさん
2005/12/02(金) 17:40:43ID:???Apahce JakartaプロジェクトやStrutsプロジェクトなど、
オープンソースソフトウェアのソースコードは公開されているから参考にしてみれば?
0016nobodyさん
2005/12/02(金) 20:04:21ID:4lCzPlwh議論で荒れるならいいけどね。
アホとかバカとか低脳な荒れ方はしないといいんだけど。
0017nobodyさん
2005/12/02(金) 21:25:10ID:???派生クラスだとprivateプロパティとして使いたい部分が共有されてしまう。
全部publicならできるのか?
0018nobodyさん
2005/12/03(土) 00:11:04ID:???class State{
var $user;
var $pass;
var $host;
var $database;
function State($user,$pass,$host,$database){
$this->user = $user;
$this->pass = $pass;
$this->host = $host;
$this->database = $database;
}
function GetCon(){
$con = mysql_connect($this->host,$this->user,$this->pass);
if($con && mysql_select_db($this->database,$con))
return $con;
else
return NULL;
}
}
0019nobodyさん
2005/12/03(土) 00:12:07ID:???class TEST{
var $con;
var $sql;
var $data;
function TEST($user,$pass,$host,$database){
$d = new State($user,$pass,$host,$database);
$this->con = $d->GetCon();
}
function MakeSQL(){
$this->sql = "SELECT user,host FROM user ";
}
function RunSQL(){
$rst = mysql_query($this->sql,$this->con);
if($rst)
for($i=0; $col=mysql_fetch_array($rst) ; $i++)
$this->data[$i] = $col;
else
return NULL;
return 1;
}
}
0020nobodyさん
2005/12/03(土) 00:12:47ID:???function MAIN($user,$pass,$host,$database){
$obj = new TEST($user,$pass,$host,$database);
if($obj->con){
$obj->MakeSQL();
$obj->RunSQL();
$this->ShowData($obj);
}
else
printf("error");
}
function ShowData($obj){
for($i=0;$i<sizeof($obj->data);$i++)
printf("%s,%s<BR>",$obj->data[$i]["user"],$obj->data[$i]["host"]);
}
}
?>
0021nobodyさん
2005/12/03(土) 00:14:16ID:???<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
</HEAD>
<BODY>
<?php
$d = new MAIN(MySQLユーザー名,MySQLパスワード,"localhost","mysql");
?>
</BODY>
</HTML>
>11
PHPでやるとこんな感じ?
ひねりやセキュリティーは無視したけど
概念だけならこんな感じで十分だと思う
ま、アクセス権の関係で動かないかもね
0022nobodyさん
2005/12/03(土) 00:24:54ID:???if ( $con === null ) {
とか、やりたくならんか?
0023nobodyさん
2005/12/03(土) 02:10:17ID:???なぜJavaScript?
>>22
それだとインスタンスごとにコネクションを保持っていうスタンスから外れるね。
0024nobodyさん
2005/12/03(土) 11:33:28ID:???static $instance = false;
if ($instance === false) {
$inctance = new . . .
じゃないのphp4ならだけど
0026nobodyさん
2005/12/03(土) 11:47:30ID:???0028nobodyさん
2005/12/03(土) 13:42:25ID:???あの言語は興味としては面白いけど、OOを生かした開発向けじゃないと思うけど。
つーかサーバーサイドでJSやってる奴いるの?
0029nobodyさん
2005/12/03(土) 16:05:11ID:???隠蔽やポリモーフィズムは他言語と変わらん。
0030nobodyさん
2005/12/04(日) 02:35:54ID:???0033nobodyさん
2005/12/05(月) 10:20:07ID:???とりあえず思ったことを書いてみるテスト。
MVCのM(MVCフレームワークに寄りかからない場合でもビジネスロジックをつっこむ部分)の設計について。
Webの場合は細かいエンティティをModelにしてしまうとかえって見通しが悪くなるから、割と大雑把なくくりでModelにした方が設計しやすい+実装しやすい+パフォーマンス的にも良いんだよね。
でもそうすると、関数でもいいものがメソッドになっただけで、ベタ書きロジックのラッパに過ぎないような実質シングルトンがいくつもできたりして。
それってオブジェクト指向という考えから反対方向に行ってしまってる。
形だけがオブジェクト指向風になってるって感じ。
もうちょっと勉強してくるわ。
0034nobodyさん
2005/12/05(月) 11:12:40ID:???0035nobodyさん
2005/12/05(月) 18:30:47ID:???ちゃんと考えて組めば、Mだけ客によって取り替えてウマーに出来ると思う。
まあ外向けとかで見栄えも気にするならMに加えてVも弄るから、分けずにMV+Cでもいいじゃんって発想?
0036nobodyさん
2005/12/11(日) 16:50:09ID:TPyd81O7仕事ではまだほとんどやってない?
0037nobodyさん
2005/12/12(月) 00:20:15ID:???どっちを聞きたいんだろ
0038nobodyさん
2005/12/12(月) 05:07:04ID:???0039nobodyさん
2005/12/12(月) 06:24:55ID:???素敵本ってないですかねぇ?
0041nobodyさん
2005/12/12(月) 08:01:46ID:???おれは知らないけど
0042nobodyさん
2005/12/12(月) 08:25:28ID:2/Uq4nevabstract class Hoge { static public function method() { echo "Fuga"; } }
class Fuga extends Hoge {}
Fuga::method();
これで"Fuga"って表示させる、みたいな。
004342
2005/12/12(月) 08:28:10ID:2/Uq4nev× これで"Fuga"って表示させる、みたいな。
○ これで"Fuga"って表示させるにはどうしたらいいですか?
0044nobodyさん
2005/12/12(月) 08:33:41ID:???004542
2005/12/12(月) 08:41:37ID:???get_class($this)のstatic版みたいなのはないですかね?
0046nobodyさん
2005/12/12(月) 09:03:12ID:???俺もこの仕様はなんとかならんものかと思ってる
但しその例だと
Fuga::method() →Fugaにない→親クラスのメソッドが呼ばれる
オーバーライドされていないため実際にはHuga::method()がコール
されるわけで親クラスの名前(Hoge)が表示されるのは正しい動作だと思う
0047nobodyさん
2005/12/12(月) 09:06:42ID:???0048nobodyさん
2005/12/12(月) 09:13:38ID:???下で隠蔽しなきゃそのまま晒される
004942
2005/12/12(月) 09:48:14ID:???無理ですかねぇ。ちょっと頑張ってみたけどやっぱ無理でした。
abstract class Hoge {
static public function method() { echo self::getMyName(); }
abstract static protected function getMyName();
}
class Fuga extends Hoge {
static protected function getMyName() { return __CLASS__; }
}
Fuga::method();
staticメソッドってオーバーライドできないんですね・・・。
0050nobodyさん
2005/12/12(月) 10:04:02ID:???0051nobodyさん
2005/12/12(月) 10:06:47ID:???オーバーライドという概念自体が存在しない
005342
2005/12/12(月) 10:55:39ID:???納得。そうなんですか。継承はされるのに・・・、と考えるとむつかしいですね。
まあとりあえずできました!!
abstract class Hoge {
static public function method() {
$bt = debug_backtrace();
for ($i = 1; $i < count($bt); $i ++)
if (empty($bt[$i]["type"]) or $bt[$i]["type"] != "::" or $bt[$i]["function"] != __FUNCTION__)
break;
echo $bt[$i - 1]["class"];
}
}
class Fuga extends Hoge {
static public function method() {
parent::method();
}
}
Fuga::method();
超微妙・・・。デバッグでもなんでもないのにdebug_backtraceとか超微妙。
005542
2005/12/13(火) 13:04:20ID:???返事が遅れて申し訳ない。・・・といってもその間にレス来てないけどw
実際にはデバッグの目的でログを取るのに、staticメソッド内で呼び出したサブクラス名を__CLASS__みたいに手軽に取得できないかを探し始めたのがきっかけでした。
その意味ではdebug_backtraceを発見したのでそれで問題解決なんだけど、元の質問をしたときには確か似たような問題を見た記憶があって、もうちょっと一般的な問題のように扱えるかも・・・とでしゃばってみた限りですorz
まあ時間的に少し余裕があったし、今後似たような状況(例えば可変クラスとか)も起こらないとは言えないってこともあって、色々考案してみました。
以下は一般的にはこうするのが(ベストとは言えないまでも)一番マシじゃないかなぁ〜という、ちょっとした提案
abstract class Hoge { static public function method($name = __CLASS__) { echo $name; } }
class Fuga extends Hoge { static public function method($name = __CLASS__) { parent::method($name); } }
Hoge::method();
Fuga::method();
サブクラスにメソッドの実装を強制できない点が痛いけど>>53よりマシかなって程度で。
まだマニュアルを引きつつ勉強中な身なんで、つっこみとかあったらよろしくです。
0056nobodyさん
2005/12/13(火) 23:32:56ID:???0057nobodyさん
2005/12/16(金) 17:53:18ID:CZKjM08Duse MT::Bootstrap App => 'MT::App::CMS';
って、どういう意味ですか?
分かるエロくない人、どうかお教えください。
0058nobodyさん
2005/12/16(金) 17:54:24ID:CZKjM08Dあと、勝手にMovable Typeがオブジェクト指向と判断してます。
0060nobodyさん
2005/12/21(水) 21:11:28ID:???__autoload() を使おうとするとどうしても一つのフォルダに
クラス定義ファイルを全部ぶち込むことになるんだけど
0061nobodyさん
2005/12/21(水) 22:45:40ID:???うんこぷー
0062nobodyさん
2005/12/22(木) 05:39:54ID:???__autoloadの中を頑張ってつくればある意味Javaのパッケージより柔軟に色々できると思う。
今即興で考えてみたけどこんなのどう?
function __autoload($class, $newdir = "") {
static $dirs = array();
if ($newdir) $dirs[] = $newdir;
if ($class) foreach ($dirs as $dir) {
$file = "$dir/$class.class.php";
if (file_exists($file)) { require_once $file; return; }
}
}
function add_import_dir($dir) {
__autoload("", $dir);
}
なんか書いてて虚しくなってきたよ・・・
0063nobodyさん
2005/12/22(木) 15:26:55ID:ORKD8JMRセッターゲッター介してアクセスする?
あるいは自分の中のことだから
直アクセスする?
Dotch?
0064nobodyさん
2005/12/22(木) 16:04:35ID:???自分のクラス内なんだから直アクセスでしょ。
クラス内でもセッタゲッタしたいってことは、そのプロパティによっぽど整合性が必要なんだろうから、場合によっては必要な部分だけabstractなクラスとして抽出して問題のプロパティをprivateにする。
ってそれWebプログラミングとどういう関係があるの?
0065nobodyさん
2005/12/22(木) 16:56:29ID:???0066nobodyさん
2005/12/22(木) 17:02:57ID:???別段論争になるようなことじゃないと思うけど
0068nobodyさん
2005/12/22(木) 18:58:37ID:???0070nobodyさん
2005/12/22(木) 22:31:30ID:???スクリプト系はMVC的に糞ってなことにはもうならないな
0071nobodyさん
2005/12/22(木) 23:00:25ID:???0073nobodyさん
2005/12/23(金) 04:52:29ID:???0074nobodyさん
2005/12/23(金) 05:24:31ID:???Rubyの方がPHPより先に世の中に知れ渡ってたらRubyの圧勝だったかもしれないが、今更PHPと比較して生産性高いとも思えないし(飽くまでWeb方面では)。
0075nobodyさん
2005/12/23(金) 06:47:01ID:???0076nobodyさん
2005/12/23(金) 10:17:08ID:???0077nobodyさん
2005/12/23(金) 12:51:21ID:???unixハッカーな人たちにはperlやrubyが今後も支持されていくでしょう。phpは違う層の人たち向け。
0078nobodyさん
2005/12/23(金) 13:53:17ID:???unixハッカーってなんだwww
そりゃC使いry
0079nobodyさん
2005/12/23(金) 14:07:50ID:???0080nobodyさん
2005/12/23(金) 14:15:32ID:???MVC以外で。
0081nobodyさん
2005/12/23(金) 18:01:01ID:???phpの生産性って、素人を安い人件費で大量に使えるってだけだからねえ。
RoRは馬鹿には理解出来ないから、流行る事は無いだろう。流行るためには馬鹿でも理解出来る事が必要だし。
0082nobodyさん
2005/12/23(金) 18:18:43ID:???Lisp信者にもその考えの奴多いんだよなぁ。
0083nobodyさん
2005/12/24(土) 02:04:43ID:???0084nobodyさん
2005/12/24(土) 13:15:52ID:???0085nobodyさん
2005/12/24(土) 20:22:24ID:???0086nobodyさん
2005/12/24(土) 21:25:57ID:???0087nobodyさん
2005/12/25(日) 02:32:29ID:???って言ってほしいんだろきっと。
LispはまだしもRoRを難しいとか言う奴初めて見た。
PHPしかできない奴のレベルが低いってのはまあ当たり前の話だが。
0088nobodyさん
2005/12/27(火) 16:43:08ID:Zix1qzzJすみません、エロくても大丈夫になりましたのでどなたか教えてください。。。
分かった事
MT/Bootstrap.pmが関係?
0089nobodyさん
2005/12/27(火) 17:59:00ID:Zix1qzzJ0090nobodyさん
2005/12/27(火) 22:04:42ID:???0091nobodyさん
2005/12/28(水) 02:23:24ID:FTSvjaEDまあアレだ、Ruby厨には聞いていないから帰れということらしい。
>>57-58
Bootstrap.pmでimport関数に%param{App}を渡していると思うのだがその辺調べてみてくれ。
0092nobodyさん
2005/12/28(水) 09:12:28ID:???配布スクリプトの読めない部分を解説しちゃる
ttp://pc8.2ch.net/test/read.cgi/php/1094842959/l50
0093nobodyさん
2006/01/01(日) 02:30:26ID:???なんというか、馬鹿丸出しな発言だな。
そもそもRoRが使えれば、Ruby使えるわけだから、
PHPしか使えないなんてことは成り立たないわけで。
逆にRoRしか使えないやつはPHP使えないしな。
0094nobodyさん
2006/01/01(日) 13:35:44ID:???0097nobodyさん
2006/01/01(日) 16:18:04ID:???0098nobodyさん
2006/01/05(木) 18:20:00ID:???0099nobodyさん
2006/01/05(木) 18:36:44ID:???とりあえず、仕事で使われてるのをみたことがないな
あと、Ruby関連は書籍がちゃんとしたのが少なくない?
ってかすれ違いなんで、こういうのはマ板で
0100100
2006/01/07(土) 17:47:26ID:???0101nobodyさん
2006/01/07(土) 18:20:48ID:???■ このスレッドは過去ログ倉庫に格納されています