PHPを使ってプログラミングするとき、
プロシージャ指向(手続き型、構造化プログラミング)でもできますが、
オブジェクト指向を使った場合の恩恵を享受するために、
PHPでオブジェクト指向プログラミングの勉強をしてみましょう。
<目的>
PHP5でオブジェクト指向プログラミングを行なうための知識を習得する。
(PHP4のOOPもOK、このスレが1000に行く前にPHP6が出たらPHP6のOOPもOK)
<方向性>
・このスレは、プログラミング初心者、PHP初心者の勉強の場として利用することを前提にします。
・PHPのOOPの話題に限定します。
(Ruby、Python、Javaなど他言語のOOPについては、その言語のスレッドでお願いします。)
・PHPのOOP学習に役立つ本、WEBサイトの紹介をお願いします。
<その他>
・略記は、「OO」=「オブジェクト指向」、「OOP」=「オブジェクト指向プログラミング」でお願いします。
・質問をする人はなるべくトリップを付けましょう。
・荒らし、煽り、叩き、気違いは無視・無干渉でお願いします。
このスレで、今日から貴方もOOP!!!\(^o^)/
PHPでOOP
11 ◆SWtzLesEmM
2007/02/23(金) 13:35:52ID:???409nobodyさん
2008/02/14(木) 15:45:33ID:??? >>408 に補足
必要性がないというより、CTable (のサブクラス)のインスタンスをnewするということは、
意味論的には、そのテーブル自体を新規に生成するということだから、ちょっと気持ち悪い。
必要性がないというより、CTable (のサブクラス)のインスタンスをnewするということは、
意味論的には、そのテーブル自体を新規に生成するということだから、ちょっと気持ち悪い。
410nobodyさん
2008/02/14(木) 15:48:44ID:??? >>389
> 私は、DBをPostgreSQLからMySQLへ変換する必要性も生じることを
> 想定した設計をしただけだよ。
> こうやっておけば、書き換えるコードも少なくて済む。
とか言っておきながら、
> // コンストラクタ
> function CSearch_Personal(){
> $db_info = ""; // ここでDB接続に必要な情報を入れる。
> $this->m_db = new CDB_PostgreSQL($db_info);
> }
CSearch_Personalのコンストラクタで
CDB_PostgreSQL決め打ちなのはナンセンス。
DBをPostgreSQLからMySQLへ変換する必要性も生じることを想定した設計というのなら
設計としては、Personalデータを扱う(Search専用?)クラスは
接続するデータベースに依存すべきではない。
(限られた環境だけで動くものを作ればいいだけならどうでもいいが)
接続オブジェクト(CDB_PostgreSQL)はCSearch_Personalクラス外部から
与える。そのときの引数は(PHPに厳密な型は無いが)抽象クラスのCDB_Connection型で与える。
こうすることで、DBをPostgreSQLからMySQLへ変換する必要が生じたとき、
CSearch_Personalを一切修正しないですむ。
> 私は、DBをPostgreSQLからMySQLへ変換する必要性も生じることを
> 想定した設計をしただけだよ。
> こうやっておけば、書き換えるコードも少なくて済む。
とか言っておきながら、
> // コンストラクタ
> function CSearch_Personal(){
> $db_info = ""; // ここでDB接続に必要な情報を入れる。
> $this->m_db = new CDB_PostgreSQL($db_info);
> }
CSearch_Personalのコンストラクタで
CDB_PostgreSQL決め打ちなのはナンセンス。
DBをPostgreSQLからMySQLへ変換する必要性も生じることを想定した設計というのなら
設計としては、Personalデータを扱う(Search専用?)クラスは
接続するデータベースに依存すべきではない。
(限られた環境だけで動くものを作ればいいだけならどうでもいいが)
接続オブジェクト(CDB_PostgreSQL)はCSearch_Personalクラス外部から
与える。そのときの引数は(PHPに厳密な型は無いが)抽象クラスのCDB_Connection型で与える。
こうすることで、DBをPostgreSQLからMySQLへ変換する必要が生じたとき、
CSearch_Personalを一切修正しないですむ。
411nobodyさん
2008/02/14(木) 15:49:17ID:???412nobodyさん
2008/02/14(木) 15:51:40ID:??? >>408-409
まあ、そこは設計しだいでいくつかやり方があるけど、
ActiveRecordパターンの場合、インスタンスはテーブルを作るという意味ではなく、
クラスがテーブル全体で、そのインスタンスはテーブルのレコードという扱いになる。
そしてフィールドがプロパティ。
まあ、そこは設計しだいでいくつかやり方があるけど、
ActiveRecordパターンの場合、インスタンスはテーブルを作るという意味ではなく、
クラスがテーブル全体で、そのインスタンスはテーブルのレコードという扱いになる。
そしてフィールドがプロパティ。
414nobodyさん
2008/02/14(木) 16:01:23ID:??? >>412
これですかね。
http://www.martinfowler.com/eaaCatalog/activeRecord.html
細かいけど、
>そのインスタンスはテーブルのレコードという扱いになる。
なら、searchメソッドは、staticなり外部に置くのではないかと思う。
確かに updateはこの場合 staticにすべきものではないですね。失礼。
これですかね。
http://www.martinfowler.com/eaaCatalog/activeRecord.html
細かいけど、
>そのインスタンスはテーブルのレコードという扱いになる。
なら、searchメソッドは、staticなり外部に置くのではないかと思う。
確かに updateはこの場合 staticにすべきものではないですね。失礼。
415412
2008/02/14(木) 16:03:01ID:??? >>408
> あと、connection をオブジェクト内部にもってしまうと、そのオブジェクトはいつでも
> SQLを実行できてしまうので、引数で渡すようにしてる。
なんで「そのオブジェクトはいつでも SQLを実行できてしまう」のが悪いのかわからないけど、
> (まぁ、staticにしたら引数で渡すしかないけど)
これが理由なら、そのクラスをシングルトンパターンで
実装するという方法もある。
CPersonal::search() などという書き方で呼べるぞ。
ただし、PHP4に対応した書き方だとすごく気持ち悪いんだが(笑)
CakePHPでgetInstance()というメソッドをキーワードにして探せば
実装例が見つかると思う。
getInstance()関数内のstatic変数に配列[0]にで確保(なぜ?)した後
各メソッドの初めで$_this = getInstance() して$_thisで参照するという・・・
まあ見たほうが早い(?)
> あと、connection をオブジェクト内部にもってしまうと、そのオブジェクトはいつでも
> SQLを実行できてしまうので、引数で渡すようにしてる。
なんで「そのオブジェクトはいつでも SQLを実行できてしまう」のが悪いのかわからないけど、
> (まぁ、staticにしたら引数で渡すしかないけど)
これが理由なら、そのクラスをシングルトンパターンで
実装するという方法もある。
CPersonal::search() などという書き方で呼べるぞ。
ただし、PHP4に対応した書き方だとすごく気持ち悪いんだが(笑)
CakePHPでgetInstance()というメソッドをキーワードにして探せば
実装例が見つかると思う。
getInstance()関数内のstatic変数に配列[0]にで確保(なぜ?)した後
各メソッドの初めで$_this = getInstance() して$_thisで参照するという・・・
まあ見たほうが早い(?)
416nobodyさん
2008/02/14(木) 16:13:08ID:??? >>415
>なんで「そのオブジェクトはいつでも SQLを実行できてしまう」のが悪いのかわからないけど、
DBなんて巨大なグローバル変数の固まりみたいなものだし、アクセスもメモリと比べて遅いし、
トランザクションの都合からもある範囲でDBアクセスしている可能性がないかが
簡単に見分けられないのは怖いと思うけど。
>なんで「そのオブジェクトはいつでも SQLを実行できてしまう」のが悪いのかわからないけど、
DBなんて巨大なグローバル変数の固まりみたいなものだし、アクセスもメモリと比べて遅いし、
トランザクションの都合からもある範囲でDBアクセスしている可能性がないかが
簡単に見分けられないのは怖いと思うけど。
417412
2008/02/14(木) 16:13:24ID:???418412
2008/02/14(木) 16:17:15ID:???419nobodyさん
2008/02/14(木) 16:33:55ID:??? >>418
必要なメソッドにしか connection を渡さず、オブジェクト内に保存しないことで、
「データベースに操作できるところ」を限定するという話。
connection をDBアクセスする権限と見るならば、その権限は処理に対して与えるべきで、
オブジェクトに対して与えるべきではないだろうということ。
必要なメソッドにしか connection を渡さず、オブジェクト内に保存しないことで、
「データベースに操作できるところ」を限定するという話。
connection をDBアクセスする権限と見るならば、その権限は処理に対して与えるべきで、
オブジェクトに対して与えるべきではないだろうということ。
420nobodyさん
2008/02/14(木) 17:56:06ID:??? DB周りはZendFrameworkの実装でなんら不満ないなあ。
422nobodyさん
2008/02/14(木) 18:51:49ID:??? >>421
例えば Personテーブルに depart_codeがあるとして、$person->getDepartName() としたときに、
暗黙のうちにdepart_codeをキーとしてDepartテーブルから検索する SQLが実行されたら嫌だし、
setPersonNameされたときに、そのタイミングでupdateが実行されていないか疑わなきゃいけないのも嫌。
例えば Personテーブルに depart_codeがあるとして、$person->getDepartName() としたときに、
暗黙のうちにdepart_codeをキーとしてDepartテーブルから検索する SQLが実行されたら嫌だし、
setPersonNameされたときに、そのタイミングでupdateが実行されていないか疑わなきゃいけないのも嫌。
423nobodyさん
2008/02/14(木) 19:13:43ID:???424nobodyさん
2008/02/14(木) 19:41:54ID:??? そもそもstaticも存在しないPHP4で機能をまとめたようなクラス(CDB_PostgreSQLクラスみたいなの)
を作ろうとしてるのが気持ち悪い。
しかもOOPなんてデータベースの各要素に関数をくっつけたようなもんなんだから既存のデータを単体でしか扱わない
データベースと相性が悪いのは分かりきったことだろう。
を作ろうとしてるのが気持ち悪い。
しかもOOPなんてデータベースの各要素に関数をくっつけたようなもんなんだから既存のデータを単体でしか扱わない
データベースと相性が悪いのは分かりきったことだろう。
425nobodyさん
2008/02/14(木) 19:54:36ID:??? OOPはデータベースの各要素に関数をくっつけたようなもの?
既存のデータベースはデータを単体でしか扱わない?
だからOOPとデータベースと相性が悪い?
( ゚Д゚) ワカラナイ
既存のデータベースはデータを単体でしか扱わない?
だからOOPとデータベースと相性が悪い?
( ゚Д゚) ワカラナイ
426412
2008/02/14(木) 20:04:12ID:??? >>424
staticはあくまでstaticだよと明示しているだけで
本質的には必要なものとは思えないけど。便利だけどね。
それと、CDB_PostgreSQLは「機能をまとめたクラス」ではないよ。
たとえば一つのアプリでサーバー負荷分散などで、
複数の接続を使用するときとか、複数のインスタンスが出来る。
staticはあくまでstaticだよと明示しているだけで
本質的には必要なものとは思えないけど。便利だけどね。
それと、CDB_PostgreSQLは「機能をまとめたクラス」ではないよ。
たとえば一つのアプリでサーバー負荷分散などで、
複数の接続を使用するときとか、複数のインスタンスが出来る。
427nobodyさん
2008/02/15(金) 07:09:54ID:??? PHPでもメンバポインタとかつかえれば
インスタンスに縛られない柔軟なOOPができるのにな
インスタンスに縛られない柔軟なOOPができるのにな
428nobodyさん
2008/02/15(金) 17:51:58ID:??? 少しだけど、クラス分割のコツが掲載されてたのではっておきます。
VBプログラマ向けの情報だと、OOPの考え方の情報が結構ありそうです。
業務Webアプリの作り方の基礎(前編)
業務アプリ開発で失敗しないコツ
http://www.atmarkit.co.jp/fdotnet/vblab/bizappbasic01/bizappbasic01_01.html
> 1つの機能(=たとえWebアプリで複数のページにまたがっていたとしても一連の作業を
> 完了させるまでの一連の操作)に対して、1つのビジネス・ロジック層のクラスを
> 作ってみることをお勧めする。
> 一般的な業務アプリでは、クラスを細かくしすぎてしまうとどこで何を行っているのかが
> 分かりづらくなり、結果的にメンテナンスしづらいアプリになることがある。
(パフォーマンスを考慮し、)
> 可能な限りクラスのインスタンス化が必要ない静的メソッド(Sharedプロシージャ)で
> 作成したステートレスな設計にすることをお勧めする。
VBプログラマ向けの情報だと、OOPの考え方の情報が結構ありそうです。
業務Webアプリの作り方の基礎(前編)
業務アプリ開発で失敗しないコツ
http://www.atmarkit.co.jp/fdotnet/vblab/bizappbasic01/bizappbasic01_01.html
> 1つの機能(=たとえWebアプリで複数のページにまたがっていたとしても一連の作業を
> 完了させるまでの一連の操作)に対して、1つのビジネス・ロジック層のクラスを
> 作ってみることをお勧めする。
> 一般的な業務アプリでは、クラスを細かくしすぎてしまうとどこで何を行っているのかが
> 分かりづらくなり、結果的にメンテナンスしづらいアプリになることがある。
(パフォーマンスを考慮し、)
> 可能な限りクラスのインスタンス化が必要ない静的メソッド(Sharedプロシージャ)で
> 作成したステートレスな設計にすることをお勧めする。
429nobodyさん
2008/02/15(金) 20:19:56ID:??? たまに昔のサイト触ったりすると非OOPなんてもうやってらんねーと思う
DRYになってないから直すの大変
DRYになってないから直すの大変
430nobodyさん
2008/02/15(金) 22:23:07ID:??? OOPってのは設計的な考え方ってのが含まれるんだけど、
そういう考え方は別として、単にコーディング技法として便利だよ。
そういう考え方は別として、単にコーディング技法として便利だよ。
431nobodyさん
2008/02/15(金) 22:36:39ID:???432に ◆lKs5QMUHoA
2008/02/15(金) 23:49:43ID:???434383
2008/02/16(土) 00:15:26ID:??? 質問しておきながら、反応かなり遅れてしまってごめんなさい。
具体的なコードやアドバイスを提示してくださった方々、ありがとう。
ちょっとまだ、自分には敷居が高くて色々大変そうですが、
考えるよりも産むが易し、と言うので、手を動かして色々試行錯誤してみます。
ありがとうございました。
具体的なコードやアドバイスを提示してくださった方々、ありがとう。
ちょっとまだ、自分には敷居が高くて色々大変そうですが、
考えるよりも産むが易し、と言うので、手を動かして色々試行錯誤してみます。
ありがとうございました。
435nobodyさん
2008/02/16(土) 11:47:29ID:??? フレームワークの利点などの検証の参考となるかと思ったので書いておきます。
ASP.NETでは、「検証コントロール」というのが便利そうだ。
「プログラムを作成するたびにこういうのをいちいち書いたりしなくていい」という
部分の利便性は良く分かる。
ASP.NETで学ぶVisual Studio .NETの魅力
第2回 Visual Studio.NETでプログラム・レス開発を学ぶ(前編)
http://www.atmarkit.co.jp/fdotnet/aspandvs/aspandvs02/aspandvs02_04.html
だが、こういうのは逆にそのフレームワークに縛られてしまうのが欠点だな。
準備されてるコントロールを自分の意図するようにやりたいが、その方法が誰も分からない
もしくは、出来ない場合は、それで終わりみたいな。
話はずれるが、Accessで開発してる時、各種コントロールやウィザードの組み合わせでは
対応出来ないと感じたのを思い出した。ウィザードが準備する通りの物が目的ならば良いのだが、
それにちょっと変更を加えたい場合はどうしたらよいのかという感じ。各種プロパティーの
値を変更してみても変な方向に変わっていくだけ。
自分の意図するようにカスタマイズしたい場合は、非連結のテキストボックスを貼り付けて
VBAで制御するスタイルでやってたな。
ASP.NETでは、「検証コントロール」というのが便利そうだ。
「プログラムを作成するたびにこういうのをいちいち書いたりしなくていい」という
部分の利便性は良く分かる。
ASP.NETで学ぶVisual Studio .NETの魅力
第2回 Visual Studio.NETでプログラム・レス開発を学ぶ(前編)
http://www.atmarkit.co.jp/fdotnet/aspandvs/aspandvs02/aspandvs02_04.html
だが、こういうのは逆にそのフレームワークに縛られてしまうのが欠点だな。
準備されてるコントロールを自分の意図するようにやりたいが、その方法が誰も分からない
もしくは、出来ない場合は、それで終わりみたいな。
話はずれるが、Accessで開発してる時、各種コントロールやウィザードの組み合わせでは
対応出来ないと感じたのを思い出した。ウィザードが準備する通りの物が目的ならば良いのだが、
それにちょっと変更を加えたい場合はどうしたらよいのかという感じ。各種プロパティーの
値を変更してみても変な方向に変わっていくだけ。
自分の意図するようにカスタマイズしたい場合は、非連結のテキストボックスを貼り付けて
VBAで制御するスタイルでやってたな。
436nobodyさん
2008/02/16(土) 12:59:37ID:??? Accessではグリッドが無いけれど、サブフォームで代用する方法はある。
しかし、そのカスタマイズ度は低い。(確か、クリックしたセルの場所を
取るとか、一つのセルだけ色を変更するとかがかなり苦手だったような。)
サブフォームで代用できない場合は、フォーム上にグリッドを貼り付けるような
モジュールは無いので、DBへのアクセス手段が手軽なものを捨ててでも
VBで0から作り直すのが一般的な選択方法となる。
Webアプリのフレームワークでもこのような状況になる事ってあるのかなぁ?
しかし、そのカスタマイズ度は低い。(確か、クリックしたセルの場所を
取るとか、一つのセルだけ色を変更するとかがかなり苦手だったような。)
サブフォームで代用できない場合は、フォーム上にグリッドを貼り付けるような
モジュールは無いので、DBへのアクセス手段が手軽なものを捨ててでも
VBで0から作り直すのが一般的な選択方法となる。
Webアプリのフレームワークでもこのような状況になる事ってあるのかなぁ?
437383
2008/02/16(土) 17:18:06ID:??? PDOを継承する形でこんなクラスにしてみました。
突っ込みどころ満載だと思うんだけど、とりあえず、このコーディング方法はやめておいたほうがいい、
っていうところを教えていただけると嬉しいです。
class DBConnect(){
// メンバ変数にDB接続情報を記述
function __construct(){} // PDOをインスタンス化
function getConnID(){} // PDOオブジェクト格納変数を返す
}
class TableCtrl extends PDO{} //PDOを継承、汎用関数を定義してもOK.
class CtrlA extends TableCtrl{ // テーブルAを操作する
protected $ConnID;
function __construct($ConnID){} //PDOオブジェクト格納変数を渡す
}
突っ込みどころ満載だと思うんだけど、とりあえず、このコーディング方法はやめておいたほうがいい、
っていうところを教えていただけると嬉しいです。
class DBConnect(){
// メンバ変数にDB接続情報を記述
function __construct(){} // PDOをインスタンス化
function getConnID(){} // PDOオブジェクト格納変数を返す
}
class TableCtrl extends PDO{} //PDOを継承、汎用関数を定義してもOK.
class CtrlA extends TableCtrl{ // テーブルAを操作する
protected $ConnID;
function __construct($ConnID){} //PDOオブジェクト格納変数を渡す
}
438438
2008/02/16(土) 17:21:28ID:??? スクリプト先頭で、DBConnectをnewして、PDO格納オブジェクトを受け取ってから、
それを引数にCtrlAをnewする感じ……。
一応動きはするけど……全然ダメだな……。
それを引数にCtrlAをnewする感じ……。
一応動きはするけど……全然ダメだな……。
440438
2008/02/17(日) 16:53:21ID:??? >>439
返信ありがとう。
まったくわかってないみたいなので、クラスの設計方法から学び直します。
実際の処理をする具象クラスを作って、また別に、それを統括するクラスを作っていく。
複数のクラスを設定によって使い分けしなきゃいけない場合は、抽象クラスなりインターフェイスなりを継承(後者の場合は実装)させて、
メソッド名を統一させた上で、ポリモーフィズム――クラスによって同名メソッドの振る舞いを変えさせるって解釈でいいよね?――で実現させる。
基本こんな感じかな?
プリペアドステートメントに惹かれて、PDOを継承する形で作って見たんだけど、
DB接続関連の場合、接続IDを返してくるmysql_connect(); なんかのほうが、使いやすい気がする。
フレームワーク自作なんて、自分にとってはとんでもない話しですよ……。
返信ありがとう。
まったくわかってないみたいなので、クラスの設計方法から学び直します。
実際の処理をする具象クラスを作って、また別に、それを統括するクラスを作っていく。
複数のクラスを設定によって使い分けしなきゃいけない場合は、抽象クラスなりインターフェイスなりを継承(後者の場合は実装)させて、
メソッド名を統一させた上で、ポリモーフィズム――クラスによって同名メソッドの振る舞いを変えさせるって解釈でいいよね?――で実現させる。
基本こんな感じかな?
プリペアドステートメントに惹かれて、PDOを継承する形で作って見たんだけど、
DB接続関連の場合、接続IDを返してくるmysql_connect(); なんかのほうが、使いやすい気がする。
フレームワーク自作なんて、自分にとってはとんでもない話しですよ……。
441nobodyさん
2008/02/17(日) 19:14:54ID:??? お前の下らない御託はいいから見ろっつの
442nobodyさん
2008/02/17(日) 20:01:12ID:???443nobodyさん
2008/02/17(日) 20:03:55ID:??? なぜちいたんを選ぶか・・・
444nobodyさん
2008/02/17(日) 20:08:23ID:??? ( ゚д゚)ポカーン
445nobodyさん
2008/02/17(日) 20:22:12ID:??? 救いようが無いな。
446nobodyさん
2008/02/17(日) 21:40:51ID:??? スレのレベルを下げちゃってごめんなさい……。
軽い「ちいたん」が入門にはちょうどいいかな、と思っての選択です。
いきなり、CakePHPなど大きいのを見ても、余計に混乱しそうだったので。
スレのレベルを余計に下げるだけなのでROMします。
度重なるスレ汚し、失礼しました。
軽い「ちいたん」が入門にはちょうどいいかな、と思っての選択です。
いきなり、CakePHPなど大きいのを見ても、余計に混乱しそうだったので。
スレのレベルを余計に下げるだけなのでROMします。
度重なるスレ汚し、失礼しました。
4471 ◆SWtzLesEmM
2008/02/17(日) 23:11:41ID:??? >>324
>>335
掲示板スクリプトの改善、どうもありがとうございます。(*^^*)v
↓動作サンプルを設置しました。
http://ssurl.net/n777
http://ssurl.net/ioah
>>335
掲示板スクリプトの改善、どうもありがとうございます。(*^^*)v
↓動作サンプルを設置しました。
http://ssurl.net/n777
http://ssurl.net/ioah
448nobodyさん
2008/02/22(金) 09:37:11ID:??? フレームワークをみてみろとアドバイスをしてくださってる方は、
もう少し具体的なアドバイスを出して欲しい。
具体的に、どんなフレームワークの構造を見て、どんなことを
学んだのかなどをあわせて出してくれたら、勉強もしやすいと
思うのですが。
もう少し具体的なアドバイスを出して欲しい。
具体的に、どんなフレームワークの構造を見て、どんなことを
学んだのかなどをあわせて出してくれたら、勉強もしやすいと
思うのですが。
449nobodyさん
2008/02/22(金) 09:52:27ID:??? お前は人に逐一指示されないと何にもできないんだな
450nobodyさん
2008/02/22(金) 09:59:49ID:??? フレームワークはどこに行けば手に入りますか?
451nobodyさん
2008/02/22(金) 11:02:18ID:??? >>449
漠然としすぎていて良く分からないのである程度は具体例が
欲しいという意味なのですが。
>>450
こちらへどうぞ
【PHP】フレームワークについて語るスレ10【総合】
http://pc11.2ch.net/test/read.cgi/php/1202521438/l50
漠然としすぎていて良く分からないのである程度は具体例が
欲しいという意味なのですが。
>>450
こちらへどうぞ
【PHP】フレームワークについて語るスレ10【総合】
http://pc11.2ch.net/test/read.cgi/php/1202521438/l50
453nobodyさん
2008/02/22(金) 11:36:33ID:??? >>451
自分でDBの抽象化を考えてみて、クラスの定義だけでも書いてみろ。
その後にZFのZend_DBを見て、自分のとどう違うか、なぜそうなっているのかを考えろ。
それから、偉そうな態度で教えてもらおうと思うな。
自分でDBの抽象化を考えてみて、クラスの定義だけでも書いてみろ。
その後にZFのZend_DBを見て、自分のとどう違うか、なぜそうなっているのかを考えろ。
それから、偉そうな態度で教えてもらおうと思うな。
454nobodyさん
2008/02/22(金) 11:50:38ID:??? 別に偉そうじゃないだろ。
むしろお前のほうが偉そうだ。
何被害妄想してるんだw
むしろお前のほうが偉そうだ。
何被害妄想してるんだw
455nobodyさん
2008/02/22(金) 12:50:26ID:??? 本気でOOP勉強したい人はまずPHP止めないと・・
PHPの世界にOOPの参考になるものがどれほどある?
javaやらずOOP出来ましたってありえないでしょ。
PHPの世界にOOPの参考になるものがどれほどある?
javaやらずOOP出来ましたってありえないでしょ。
457nobodyさん
2008/02/22(金) 13:04:24ID:??? 本気でOOP勉強する為にPHPをやめる必要は無い。
PHP使いながら、OOP勉強すればいいだけ。
本気でOOP勉強をするなら、非実用的な言語も含めていろいろな
言語を使うことになる。そしてそれらが実用的かというと別の問題。
いくらsmalltalkでOOPをマスターしました!とかいっても
それでウェブサービスを作ることはまずありえないんだから
手段と目的を逆にしないようにね。
PHP使いながら、OOP勉強すればいいだけ。
本気でOOP勉強をするなら、非実用的な言語も含めていろいろな
言語を使うことになる。そしてそれらが実用的かというと別の問題。
いくらsmalltalkでOOPをマスターしました!とかいっても
それでウェブサービスを作ることはまずありえないんだから
手段と目的を逆にしないようにね。
458nobodyさん
2008/02/22(金) 13:04:45ID:??? その論争は、きりが無いから、マ板とかのOOPのスレでやって欲しい。
「スクリプトの世界ならRubyだろ。」とか、結論が見えてこないし、
このスレの趣旨とは違うと思う。
「スクリプトの世界ならRubyだろ。」とか、結論が見えてこないし、
このスレの趣旨とは違うと思う。
460nobodyさん
2008/02/22(金) 13:13:27ID:??? 確かにPHPでOOPの解説をしている情報は非常に少ないので、
勉強の際はjavaやC#などの情報を読みながらやることになると思う。
しかし、PHPを辞めるまでする必要性は無いと思う。
言いたいのは「OOPの勉強するのなら、PHPに限定してはいけないよ。」
じゃないの?
勉強の際はjavaやC#などの情報を読みながらやることになると思う。
しかし、PHPを辞めるまでする必要性は無いと思う。
言いたいのは「OOPの勉強するのなら、PHPに限定してはいけないよ。」
じゃないの?
461nobodyさん
2008/02/22(金) 13:16:21ID:??? 本気で勉強する為にPHPをやめた。
そしてOOPをマスターした。
しかし、Javaでは共有サーバーで動くソフトを作れなかった。
多くのオープンソースアプリはPHP製だった。
OOPをマスターしたが、何も出来なくなった。 完。
そしてOOPをマスターした。
しかし、Javaでは共有サーバーで動くソフトを作れなかった。
多くのオープンソースアプリはPHP製だった。
OOPをマスターしたが、何も出来なくなった。 完。
462nobodyさん
2008/02/22(金) 13:27:17ID:??? 前から思ってたんだが、頭の悪い人間が粘着してるな。
自分がどんな風に思われてるかも分かってないんだろうなw
自分がどんな風に思われてるかも分かってないんだろうなw
463nobodyさん
2008/02/22(金) 13:58:48ID:??? >>457
> いくらsmalltalkでOOPをマスターしました!とかいっても
> それでウェブサービスを作ることはまずありえないんだから
今やウエブサービスに欠かせないMVCはそもそもsmalltalkのOOP由来なんだが…。
継続ベースだって覚えておいて損はない。
http://www.ibm.com/developerworks/opensource/library/os-lightweight8/
http://www.ibm.com/developerworks/jp/java/library/j-cb07056/index.html
> いくらsmalltalkでOOPをマスターしました!とかいっても
> それでウェブサービスを作ることはまずありえないんだから
今やウエブサービスに欠かせないMVCはそもそもsmalltalkのOOP由来なんだが…。
継続ベースだって覚えておいて損はない。
http://www.ibm.com/developerworks/opensource/library/os-lightweight8/
http://www.ibm.com/developerworks/jp/java/library/j-cb07056/index.html
464nobodyさん
2008/02/22(金) 14:19:47ID:??? PHPでOOPする為に別の言語でOOPの勉強をする。
自分の為に必要だからやるだけ。
自分の為に必要だからやるだけ。
466nobodyさん
2008/02/22(金) 17:56:13ID:??? このソースの解析をがんばればいろいろ見えてくるだろうけど、
一人じゃ到底無理だろうな。別スレでも立てて、解析して
ドキュメント作ろう!見たいなことやってみる?
Visual Studio 2008で見る.NET Frameworkのソースコード
http://www.atmarkit.co.jp/fdotnet/insiderseye/20080222sourcecode/sourcecode.html
> 公開されたソースコードには(もちろん英語だが)多くのコメントが入っており、
> ローカル変数名も元のままの“生”のソースコードである。
> そしてそれがVisual Studio 2008でシームレスにトレースできるようになる
一人じゃ到底無理だろうな。別スレでも立てて、解析して
ドキュメント作ろう!見たいなことやってみる?
Visual Studio 2008で見る.NET Frameworkのソースコード
http://www.atmarkit.co.jp/fdotnet/insiderseye/20080222sourcecode/sourcecode.html
> 公開されたソースコードには(もちろん英語だが)多くのコメントが入っており、
> ローカル変数名も元のままの“生”のソースコードである。
> そしてそれがVisual Studio 2008でシームレスにトレースできるようになる
467nobodyさん
2008/02/23(土) 08:39:50ID:??? >>447
サンプル見たけど
Viewで変数が入らないとこで”を使ってる意味がわからない
”と’の使い方間違ってると思う
面倒な使いわけするならsprintfという手もある
パラメータ変数が渡ってくる
switch文のcaseに頭文字を大文字にしてる意味がわからない
サンプル見たけど
Viewで変数が入らないとこで”を使ってる意味がわからない
”と’の使い方間違ってると思う
面倒な使いわけするならsprintfという手もある
パラメータ変数が渡ってくる
switch文のcaseに頭文字を大文字にしてる意味がわからない
468nobodyさん
2008/02/23(土) 08:44:08ID:??? function html_head(){
echo "<html>";
echo "<head><title>BBS</title></head>";
echo "<body>";
}
上は、こうでいいやん!
function html_head(){
echo '<html>';
echo '<head><title>BBS</title></head>';
echo '<body>';
}
なんでダブルクォートやねん
echo "<html>";
echo "<head><title>BBS</title></head>";
echo "<body>";
}
上は、こうでいいやん!
function html_head(){
echo '<html>';
echo '<head><title>BBS</title></head>';
echo '<body>';
}
なんでダブルクォートやねん
469nobodyさん
2008/02/23(土) 09:12:10ID:??? >>447
class View_Baseは
helper的な役割だからいいとしても
View_List
View_WriteFinish
コントローラで判断させるべき機能が
Viewで書かれてるし
テンプレート化されてないのもあって
ぐちゃぐちゃですね。
ここがOOP構造を理解しにくい作りになってる
コントローラは面倒でもOOP理解するには必要だ
理解しやすくするためにテンプレート化も必要
class View_Baseは
helper的な役割だからいいとしても
View_List
View_WriteFinish
コントローラで判断させるべき機能が
Viewで書かれてるし
テンプレート化されてないのもあって
ぐちゃぐちゃですね。
ここがOOP構造を理解しにくい作りになってる
コントローラは面倒でもOOP理解するには必要だ
理解しやすくするためにテンプレート化も必要
470nobodyさん
2008/02/23(土) 09:19:29ID:??? >>447
本来コントローラとModelがやりとりする部分が
コントローラが無いために
Viewで処理されてる
MVモデルですね!
OOP構造化理解のためには
面倒でもMVCモデルじゃないと
初心者を間違った方向に導きますよ!!
本来コントローラとModelがやりとりする部分が
コントローラが無いために
Viewで処理されてる
MVモデルですね!
OOP構造化理解のためには
面倒でもMVCモデルじゃないと
初心者を間違った方向に導きますよ!!
471nobodyさん
2008/02/23(土) 12:22:21ID:???472nobodyさん
2008/02/23(土) 13:43:29ID:i4AYcehM http://www.microsoft.com/japan/msdn/practices/type/Patterns/enterprise/DesMVC.aspx
これの
アクティブモデルは、コントローラとは関係なくモデルで状態が変更される場合に使用されます。
これは別のソースでデータが変更され、この変更をビューに反映する必要がある場合に起こります。
株価相場表示を例に考えてみます。株価データが変更された場合、外部ソースからデータを受け取り、チッカーバンドや警告ウィンドウなどのビューを更新する必要があります。
モデルの内部状態の変更が検知できるのはモデルだけなので、モデルからビューに表示を更新するよう通知する必要があります。
って、hoge.php?param1=aaa¶m2=iiiみたいなリクエストを解析してコントローラがそれに応じたビューを選択して云々
ではなくて、例えばブログだったら記事テーブルにまだ一つもデータが無いときは「まだ記事が登録されていません」のビューをモデルが選ぶ、ってことかい?
だとしたらどうやって実装したらいいんだろ・・・
そのモデルを使用するビューをモデルに登録しておいて、モデルのデータによって分岐させて使うビューを選択。そのときにビューは出力に必要なデータをモデルからひっぱりだす
MSDNは書き方がやたらめんどいぜ
これの
アクティブモデルは、コントローラとは関係なくモデルで状態が変更される場合に使用されます。
これは別のソースでデータが変更され、この変更をビューに反映する必要がある場合に起こります。
株価相場表示を例に考えてみます。株価データが変更された場合、外部ソースからデータを受け取り、チッカーバンドや警告ウィンドウなどのビューを更新する必要があります。
モデルの内部状態の変更が検知できるのはモデルだけなので、モデルからビューに表示を更新するよう通知する必要があります。
って、hoge.php?param1=aaa¶m2=iiiみたいなリクエストを解析してコントローラがそれに応じたビューを選択して云々
ではなくて、例えばブログだったら記事テーブルにまだ一つもデータが無いときは「まだ記事が登録されていません」のビューをモデルが選ぶ、ってことかい?
だとしたらどうやって実装したらいいんだろ・・・
そのモデルを使用するビューをモデルに登録しておいて、モデルのデータによって分岐させて使うビューを選択。そのときにビューは出力に必要なデータをモデルからひっぱりだす
MSDNは書き方がやたらめんどいぜ
473nobodyさん
2008/02/23(土) 13:56:50ID:i4AYcehM コントローラがリクエスト解析
↓
そのリクエストにおいて必要なモデルのインスタンス生成
↓
モデルのメソッド呼び出す
↓
選択したビューのupdate呼びだして出力に必要な変数定義
↓
モデルがビューの出力するメソッドを呼ぶ
ビューはモデルからの変更を受け付けるupdateメソッドと出力するためのputHtmlメソッド持つインターフェイスを実装する
なんか間違ってますか>< 教えてください!><
↓
そのリクエストにおいて必要なモデルのインスタンス生成
↓
モデルのメソッド呼び出す
↓
選択したビューのupdate呼びだして出力に必要な変数定義
↓
モデルがビューの出力するメソッドを呼ぶ
ビューはモデルからの変更を受け付けるupdateメソッドと出力するためのputHtmlメソッド持つインターフェイスを実装する
なんか間違ってますか>< 教えてください!><
474nobodyさん
2008/02/23(土) 14:42:12ID:??? なんですでにあるフレームワークを参考にしない?
475474
2008/02/23(土) 14:43:18ID:??? 474は無視してくれ
476474
2008/02/23(土) 15:11:03ID:??? >>472
それはようするに、株価データのようにユーザーが
ページを更新しなくてもデータが更新されるときの話。
コントローラがモデルからデータ引っ張ってきて
そのデータをビューに渡して表示という処理は変わらない。
↑この処理を、普通は「URLを開いた」というタイミングで行っているわけ。
しかし、そのタイミングだと株価データ表示のようなリアルタイムでの表示は難しい
人間がF5を押す必要がある。この場合も更新されているとは限らず無駄に負荷が高くなる。
それを(ウェブアプリ以外では)モデルからデータが変更されたよーと
コントローラ・ビューに通知し、その通知が来たタイミングでコントローラ・ビューが
モデルからデータを引っ張ってきて(ry)という設計方法がある。
それが>>472で言っていること。
モデルに対して、コントローラやビューを「変更あったら俺に通知してくれ」
登録することでそれを実現する。
(データに変更があったらコントローラ・ビューのこの関数を呼び出してくれとモデルに登録する)
でも、この設計。モデル(つまりサーバー)から変更の通知をすることになるので
ウェブアプリでは一工夫必要になる。結局は、JavaScriptを使って
一定ごとに変更チェックをすることになるわけだが、まあそれをAjaxとかの技術で
非同期的にバックグラウンドで行うことにより、見た目上はサーバーから
変更通知がくるような感じに出来るんでしょ?やったこと無いけど。
その通知を元に、画面の一部、もしくはすべてを再描画する。
あとは詳しい人に任せた。
それはようするに、株価データのようにユーザーが
ページを更新しなくてもデータが更新されるときの話。
コントローラがモデルからデータ引っ張ってきて
そのデータをビューに渡して表示という処理は変わらない。
↑この処理を、普通は「URLを開いた」というタイミングで行っているわけ。
しかし、そのタイミングだと株価データ表示のようなリアルタイムでの表示は難しい
人間がF5を押す必要がある。この場合も更新されているとは限らず無駄に負荷が高くなる。
それを(ウェブアプリ以外では)モデルからデータが変更されたよーと
コントローラ・ビューに通知し、その通知が来たタイミングでコントローラ・ビューが
モデルからデータを引っ張ってきて(ry)という設計方法がある。
それが>>472で言っていること。
モデルに対して、コントローラやビューを「変更あったら俺に通知してくれ」
登録することでそれを実現する。
(データに変更があったらコントローラ・ビューのこの関数を呼び出してくれとモデルに登録する)
でも、この設計。モデル(つまりサーバー)から変更の通知をすることになるので
ウェブアプリでは一工夫必要になる。結局は、JavaScriptを使って
一定ごとに変更チェックをすることになるわけだが、まあそれをAjaxとかの技術で
非同期的にバックグラウンドで行うことにより、見た目上はサーバーから
変更通知がくるような感じに出来るんでしょ?やったこと無いけど。
その通知を元に、画面の一部、もしくはすべてを再描画する。
あとは詳しい人に任せた。
477nobodyさん
2008/02/23(土) 17:10:06ID:i4AYcehM >>476
レスd
オブザーバパターンはWebアプリに不向きなのかー。
じゃあ、
//コントローラの実行メソッド
public function doExecute(){
if($this->model->getArticleNum() === 0){
$message = '記事がまだ一つもありません';
require_once('./template/Error.php');
}else{
$this->view->putHtml();
}
}
こういう、コントローラがモデルからデータ引っ張ってきて分岐して、ビューを選択する、ってのはアリなのかな?
ちょっとCakePHPとかの資料ググってくるは
レスd
オブザーバパターンはWebアプリに不向きなのかー。
じゃあ、
//コントローラの実行メソッド
public function doExecute(){
if($this->model->getArticleNum() === 0){
$message = '記事がまだ一つもありません';
require_once('./template/Error.php');
}else{
$this->view->putHtml();
}
}
こういう、コントローラがモデルからデータ引っ張ってきて分岐して、ビューを選択する、ってのはアリなのかな?
ちょっとCakePHPとかの資料ググってくるは
478nobodyさん
2008/02/23(土) 17:50:55ID:??? そういう場合Comet使うんじゃね?
Cometすげえ!って大騒ぎになってたころ資料見ても俺には何がなんだか理解できなかったけど
Cometすげえ!って大騒ぎになってたころ資料見ても俺には何がなんだか理解できなかったけど
479nobodyさん
2008/02/23(土) 20:15:50ID:??? 1を含めてコントローラの役割が全然わかってないんだよ!
MVモデルになってるんだよ!
CakePHP、symfonyのソースをよく解読してみろよ!
1のサンプルにはVIEWにコントローラで処理するコードかいてあるんだぜ!
MVモデルになってるんだよ!
CakePHP、symfonyのソースをよく解読してみろよ!
1のサンプルにはVIEWにコントローラで処理するコードかいてあるんだぜ!
480nobodyさん
2008/02/23(土) 20:21:31ID:??? PHPでOOPを追求すると
結局はMVCモデルのフレームワークにテーマが行き着くんだよね
だったらPHPフレームワークのスレと同じじゃんて感じで
ここでOOPを議論するときは
MVCモデル以外を議論の対象にしたいよ
結局はMVCモデルのフレームワークにテーマが行き着くんだよね
だったらPHPフレームワークのスレと同じじゃんて感じで
ここでOOPを議論するときは
MVCモデル以外を議論の対象にしたいよ
481nobodyさん
2008/02/23(土) 20:27:22ID:??? >>478
ワロタ。目からうろこw
httpってのはクライアント(ブラウザ側)から聞くことしかできないんだ。
どうやってもサーバーから話しかけることはできない。
だから、たとえば一分おきに、
「データ変わったかい?」「変わってねーよ」
「データ変わったかい?」「変わってねーよ」
「データ変わったかい?」「変わってねーよ」
「データ変わったかい?」「変わってねーよ」
「データ変わったかい?」「変わったよ!」
って聞かないといけない。たとえ4分半の時点でデータが変わっていても
5分後に聞くまでわからない。Cometというのは、
「データ変わったかい?」・・・・・・・・・・・(4分30秒後)「変わったよ!」・・・(数分後)「また変わったよ!」
とこうなる。
本質的にはクライアントから聞いているわけだが、変更があるまで
みのもんたみたいにずっと溜めてから返答するため、
負荷の軽減とリアルタイムな通知が実現できるというわけ。
しかし、いまさらだけどhttpで無茶やりすぎだw
ワロタ。目からうろこw
httpってのはクライアント(ブラウザ側)から聞くことしかできないんだ。
どうやってもサーバーから話しかけることはできない。
だから、たとえば一分おきに、
「データ変わったかい?」「変わってねーよ」
「データ変わったかい?」「変わってねーよ」
「データ変わったかい?」「変わってねーよ」
「データ変わったかい?」「変わってねーよ」
「データ変わったかい?」「変わったよ!」
って聞かないといけない。たとえ4分半の時点でデータが変わっていても
5分後に聞くまでわからない。Cometというのは、
「データ変わったかい?」・・・・・・・・・・・(4分30秒後)「変わったよ!」・・・(数分後)「また変わったよ!」
とこうなる。
本質的にはクライアントから聞いているわけだが、変更があるまで
みのもんたみたいにずっと溜めてから返答するため、
負荷の軽減とリアルタイムな通知が実現できるというわけ。
しかし、いまさらだけどhttpで無茶やりすぎだw
482nobodyさん
2008/02/23(土) 20:30:12ID:??? 例え巧すぎワロタ
484nobodyさん
2008/02/23(土) 20:35:35ID:??? >>480
> PHPでOOPを追求すると
> 結局はMVCモデルのフレームワークにテーマが行き着くんだよね
それはPHPに限らず。
そもそもOOPが一番よく使われるのは、フレームワーク部分なんだよ。
OOPはフレームワークを作るときに使うものといっても過言じゃない。
通常のビジネスロジック部分は基本的に単純な命令の集まりになるので
OOPを使っているという感じは無くなる。
> PHPでOOPを追求すると
> 結局はMVCモデルのフレームワークにテーマが行き着くんだよね
それはPHPに限らず。
そもそもOOPが一番よく使われるのは、フレームワーク部分なんだよ。
OOPはフレームワークを作るときに使うものといっても過言じゃない。
通常のビジネスロジック部分は基本的に単純な命令の集まりになるので
OOPを使っているという感じは無くなる。
487nobodyさん
2008/02/23(土) 20:49:01ID:???488nobodyさん
2008/02/23(土) 20:53:31ID:??? >>486
class View_List extends View_Base{
//
function Write_HTML_head(){
$this->html_head();
$this->html_title("--- PHP で OOP の BBS ---");
echo "<hr>";
}
// 書き込みフォームを表示させる。
function Write_HTML_form(){
$this->html_form_start("index.php");
echo "<b>[メッセージを投稿する]</b><br>";
$this->html_input_hidden("PAGE", "Write");
echo "タイトル:<br>";
$this->html_input_text("title");
echo "<br>";
echo "メッセージ:<br>";
$this->html_textarea("msg");
echo "<br>";
$this->html_submit(" 書き込む ");
$this->html_form_end();
}
class View_List extends View_Base{
//
function Write_HTML_head(){
$this->html_head();
$this->html_title("--- PHP で OOP の BBS ---");
echo "<hr>";
}
// 書き込みフォームを表示させる。
function Write_HTML_form(){
$this->html_form_start("index.php");
echo "<b>[メッセージを投稿する]</b><br>";
$this->html_input_hidden("PAGE", "Write");
echo "タイトル:<br>";
$this->html_input_text("title");
echo "<br>";
echo "メッセージ:<br>";
$this->html_textarea("msg");
echo "<br>";
$this->html_submit(" 書き込む ");
$this->html_form_end();
}
489nobodyさん
2008/02/23(土) 20:54:28ID:??? //
function Write_HTML_foot(){
$this->html_foot();
}
//
function Write_HTML_data($line){
echo "<b>タイトル:</b>";
echo $line->GetName();
echo "<br>";
echo "<b>メッセージ:</b>";
echo $line->GetMsg();
echo "<hr>";
}
}
この中のどこがコントローラで判断させるべき処理なんだ?
function Write_HTML_foot(){
$this->html_foot();
}
//
function Write_HTML_data($line){
echo "<b>タイトル:</b>";
echo $line->GetName();
echo "<br>";
echo "<b>メッセージ:</b>";
echo $line->GetMsg();
echo "<hr>";
}
}
この中のどこがコントローラで判断させるべき処理なんだ?
490nobodyさん
2008/02/23(土) 20:57:01ID:??? >>487
OOPはフレームワークを題材に、OOPの話をするスレならプログラム板だろ?
初心者だらけの、ここよりも良レスが来ると思うんだが
PHPにこだわる理由がわからない
WEBでのフレームワークならどれも仕組みは同じだろうに
じゃあperlでOOP、rubyでOOPていうスレが無いのは何でなんだ?
OOPはフレームワークを題材に、OOPの話をするスレならプログラム板だろ?
初心者だらけの、ここよりも良レスが来ると思うんだが
PHPにこだわる理由がわからない
WEBでのフレームワークならどれも仕組みは同じだろうに
じゃあperlでOOP、rubyでOOPていうスレが無いのは何でなんだ?
491nobodyさん
2008/02/23(土) 21:21:33ID:??? function GetNextData(){
if( $line = fgets($this->m_file_hd, 1024) ){
$line2 = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($line2[0], $line2[1]);
}else{
$ans = "";
}
return $ans;
}
これは下記がいいだろ?
function GetNextData(){
$ans = "";
if( $line = fgets($this->m_file_hd, 1024) ){
$line2 = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($line2[0], $line2[1]);
}
return $ans;
}
if( $line = fgets($this->m_file_hd, 1024) ){
$line2 = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($line2[0], $line2[1]);
}else{
$ans = "";
}
return $ans;
}
これは下記がいいだろ?
function GetNextData(){
$ans = "";
if( $line = fgets($this->m_file_hd, 1024) ){
$line2 = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($line2[0], $line2[1]);
}
return $ans;
}
492nobodyさん
2008/02/23(土) 21:36:01ID:??? // データを1行読み出す。
function GetNextData(){
if( $line = fgets($this->m_file_hd, 1024) ){
$line2 = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($line2[0], $line2[1]);
}else{
$ans = "";
}
return $ans;
}
変数名の最後に数字使うのは初心者だろ?
もしコード拡張で数値計算が入ったら紛らわしい
function GetNextData(){
if( $line = fgets($this->m_file_hd, 1024) ){
$line2 = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($line2[0], $line2[1]);
}else{
$ans = "";
}
return $ans;
}
変数名の最後に数字使うのは初心者だろ?
もしコード拡張で数値計算が入ったら紛らわしい
493nobodyさん
2008/02/23(土) 21:39:32ID:??? // データを最後に追記する。
function AddLast($title, $msg){
// ファイルを開く
$hd = fopen($this->m_file_name , "a");
// データを書き込む
$line = $title . $this->m_pause_chr . $msg . "\n";
fwrite($hd, $line);
// ファイルを閉じる
fclose($hd);
}
なんでflock入れないの?
function AddLast($title, $msg){
// ファイルを開く
$hd = fopen($this->m_file_name , "a");
// データを書き込む
$line = $title . $this->m_pause_chr . $msg . "\n";
fwrite($hd, $line);
// ファイルを閉じる
fclose($hd);
}
なんでflock入れないの?
494nobodyさん
2008/02/23(土) 21:47:30ID:??? $line2 = split($this->m_pause_chr, $line);
はこれの方がわかりやすいだろ?
list($name,$msg) = split($this->m_pause_chr, $line);
はこれの方がわかりやすいだろ?
list($name,$msg) = split($this->m_pause_chr, $line);
495nobodyさん
2008/02/23(土) 21:52:46ID:??? function GetNextData(){
if( $line = fgets($this->m_file_hd, 1024) ){
$line2 = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($line2[0], $line2[1]);
}else{
$ans = "";
}
return $ans;
}
これは下記に修正した方がわかりやすいよ
function GetNextData(){
$ans = "";
if( $line = fgets($this->m_file_hd, 1024) ){
list($name,$msg) = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($name, $msg);
}
return $ans;
}
if( $line = fgets($this->m_file_hd, 1024) ){
$line2 = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($line2[0], $line2[1]);
}else{
$ans = "";
}
return $ans;
}
これは下記に修正した方がわかりやすいよ
function GetNextData(){
$ans = "";
if( $line = fgets($this->m_file_hd, 1024) ){
list($name,$msg) = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($name, $msg);
}
return $ans;
}
496nobodyさん
2008/02/23(土) 21:55:49ID:??? 変数にオブジェクトが入ってくるなら
初期化はこうだった
function GetNextData(){
$ans = null;
if( $line = fgets($this->m_file_hd, 1024) ){
list($name,$msg) = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($name, $msg);
}
return $ans;
}
初期化はこうだった
function GetNextData(){
$ans = null;
if( $line = fgets($this->m_file_hd, 1024) ){
list($name,$msg) = split($this->m_pause_chr, $line);
$ans = new Line();
$ans->SetData($name, $msg);
}
return $ans;
}
497nobodyさん
2008/02/23(土) 22:04:10ID:??? else{
$ans = "";
}
これ全部
$ans = null;
に初期化に変えて
elseとっぱらった方がいいよ
返り値はオブジェクトが入ってるか入ってないかという処理なのに
空文字を返すのよくないよ!
$ans = "";
}
これ全部
$ans = null;
に初期化に変えて
elseとっぱらった方がいいよ
返り値はオブジェクトが入ってるか入ってないかという処理なのに
空文字を返すのよくないよ!
498nobodyさん
2008/02/23(土) 22:44:30ID:??? まぁ空文字もnullも演算子によっては同様にfalse扱いできるという点がPHPの特徴なわけで
500nobodyさん
2008/02/24(日) 11:09:06ID:??? プログラム初心者がPHPだけでOOPを習得するのはほぼ不可能に近いと思う。
OOP習得が目的ならあまりにも無謀だし、全くもって得策ではない。
フレームワークとか利用しても、ユーザが$_POSTとか直接呼べちゃうと
結局OOPの意味が無いんではないだろうか?むしろそれが出来てしまうPHPは
OOP理解には全く向いていない言語だとも思うのだ。
でも不完全ながら、PHPでOOPっぽくコーディングすること自体は楽しいと思う。
OOP習得が目的ならあまりにも無謀だし、全くもって得策ではない。
フレームワークとか利用しても、ユーザが$_POSTとか直接呼べちゃうと
結局OOPの意味が無いんではないだろうか?むしろそれが出来てしまうPHPは
OOP理解には全く向いていない言語だとも思うのだ。
でも不完全ながら、PHPでOOPっぽくコーディングすること自体は楽しいと思う。
501nobodyさん
2008/02/24(日) 11:31:24ID:??? >>500
> プログラム初心者がPHPだけでOOPを習得するのはほぼ不可能に近いと思う。
どんな言語でも当たり前。
> フレームワークとか利用しても、ユーザが$_POSTとか直接呼べちゃうと
> 結局OOPの意味が無いんではないだろうか?
まったく関係ない。
> プログラム初心者がPHPだけでOOPを習得するのはほぼ不可能に近いと思う。
どんな言語でも当たり前。
> フレームワークとか利用しても、ユーザが$_POSTとか直接呼べちゃうと
> 結局OOPの意味が無いんではないだろうか?
まったく関係ない。
502nobodyさん
2008/02/24(日) 14:04:04ID:??? PHPでOOPするには
初心者じゃ無理だよ
オブジェクトの設計は上手に出来ても
コーディングレベルで初心者ならではのミスが目立つ
初心者じゃ無理だよ
オブジェクトの設計は上手に出来ても
コーディングレベルで初心者ならではのミスが目立つ
503nobodyさん
2008/02/24(日) 14:08:38ID:??? PHPでOOP勉強は適してないよ
JAVA,C#,rubyみたいに
OOPを前提として作られた言語じゃないからね
JAVA,C#,rubyみたいに
OOPを前提として作られた言語じゃないからね
504nobodyさん
2008/02/24(日) 15:14:16ID:??? 「PHPでOOPは」みたいな話は何度も出てるのに、いつも具体的な話にならないのは何で?
505nobodyさん
2008/02/24(日) 15:31:22ID:??? お前に知識がないから
506nobodyさん
2008/02/24(日) 15:37:16ID:??? ( ´・∀・`)へー
507nobodyさん
2008/02/24(日) 15:38:42ID:??? 関係なくはないよ。グローバル変数として、どこからでも呼べちゃうんだから、カプセル化できてないってことになる。
だいたい$_REQUESTや$_SESSIONがオブジェクトじゃなくって、変数な時点で、PHPのウェブアプリでオブジェクトなんて使うなっていう、PHP開発者からのメッセージと理解すべき。
だいたい$_REQUESTや$_SESSIONがオブジェクトじゃなくって、変数な時点で、PHPのウェブアプリでオブジェクトなんて使うなっていう、PHP開発者からのメッセージと理解すべき。
508nobodyさん
2008/02/24(日) 15:44:11ID:??? グローバル変数が使えたら、カプセル化できない言語ってことになるのか。
そりゃすごい。
そりゃすごい。
レスを投稿する
ニュース
- イチロー氏、野球と比べてサッカーが「うらやましい」と語る 「チームのためにという感じが」「野球は個人で成績を出さないとボロカス」 [冬月記者★]
- 【自維】鮭おにぎり198円に絶望、コンビニすら遠い存在に…「生き延びられない」物価高で広がる生活苦★6 [ひぃぃ★]
- 【W杯】韓国が大窮地 悪夢のシナリオ止まらず 決勝T進出順位ボーダーの8位に転落 セネガル、イランに抜かれる ★5 [尺アジ★]
- 【サッカー】ブラジル戦、NHKは地上波なし 本田圭佑はBSで解説… 悲鳴続出「マジかよ」 地上波はフジテレビが生中継、解説は小野伸二 [冬月記者★]
- 【サッカー】W杯の「日本VSブラジル」を他で例えると…Xで問いかけ話題「湘北vs山王」「明徳義塾vs大阪桐蔭」「ドトウvsオペラオー」★2 [o(^・-・^)o★]
- 不快に感じる作業音3位は「パソコンのキーボード音」2位に「ボールペン等のノック音」…1位は?日本人は音に敏感すぎる? [muffin★]
- 【えっち画像】たまにいるこういう奴
- 早く死刑執行して欲しい死刑囚と言えば
- 【高市悲報】日経社説、ブチ切れ。「強引な皇室典範改正は禍根を残す」 [803137891]
- なんでドッジボールは五輪種目にならないの?
- 【悲報】めちゃかわ女の子、彼氏の乳首と指を切り落として逮捕され判決の際泣きじゃくるも執行猶予でスキップしながらピースサイン [856698234]
- わいのボーナスがたぶん手取り30万くらいしかなさそうなんやが