PHPでOOP (894レス)
PHPでOOP http://medaka.5ch.io/test/read.cgi/php/1172205352/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
16: 1 ◆SWtzLesEmM [age] 2007/02/23(金) 23:49:00 ID:??? http://www.mogurin.net/index/php.obj.inc.html PHP4のOOPについて、簡単な説明がありました。 PHP5のOOPは、PHP4のOOPに変更が加えられているので、ちょっと違う部分があります。 http://medaka.5ch.io/test/read.cgi/php/1172205352/16
17: 1 ◆SWtzLesEmM [age] 2007/02/24(土) 00:03:56 ID:??? PHP4のオブジェクト指向、デザインパターンについての説明がありました。 http://www.aglabo.com/agl/proevo/PHP/objectbrain/4-composite2.html PHP5のオブジェクト指向について説明がありました。 http://www.doyouphp.jp/php5/ オブ脳 in PHP http://www.aglabo.com/agl/proevo/PHP/objectbrain/ 「委譲」などの説明がありました。 今の段階では、ちょっとよく理解できませんでしたがこんな話もあるんですね。 http://medaka.5ch.io/test/read.cgi/php/1172205352/17
18: nobodyさん [sage] 2007/02/24(土) 00:47:36 ID:??? 初心者のおれも学習するから講義すすめてくれ http://medaka.5ch.io/test/read.cgi/php/1172205352/18
19: nobodyさん [sage] 2007/02/24(土) 01:05:02 ID:??? >>18 わかった。 オブジェクトの オブとはすなわち飯富。飯富厩舎所属だということ。 オブジェクトの ジェクトトはすなわちジェクト。FF10のジェクトだということ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/19
20: nobodyさん [sage] 2007/02/24(土) 13:35:58 ID:??? オブジェクトを利用すると何がいいのか一言でまとめて http://medaka.5ch.io/test/read.cgi/php/1172205352/20
21: nobodyさん [sage] 2007/02/24(土) 13:43:25 ID:??? プロとしての自信が持てるようになります http://medaka.5ch.io/test/read.cgi/php/1172205352/21
22: 1 ◆SWtzLesEmM [sage] 2007/02/24(土) 16:26:54 ID:??? とりあえず簡単なWEBアプリケーションを作りながらOOPの勉強をしてみたいです。 OOPで掲示板を作ってみたいです。 (1)最初はOOPを使わないで掲示板を作ってみる (2)次にOOPで同じ掲示板を作ってみる という流れにすると、対比によってOOPが理解しやすくなるでしょうか? =始めに完成形ありきと。 http://medaka.5ch.io/test/read.cgi/php/1172205352/22
23: 1 ◆SWtzLesEmM [sage] 2007/02/24(土) 16:34:22 ID:??? 掲示板の機能としては、 (1)名前とタイトルと本文を入力&投稿できる。 (2)投稿の一覧(タイトル+投稿日時)が表示できる。 (3)投稿の詳細内容(1つ1つの投稿を個別に閲覧)が表示できる。 という最低限の機能で作ってみて、 後から徐々に機能を追加して拡張してみましょう。 http://medaka.5ch.io/test/read.cgi/php/1172205352/23
24: 1 ◆SWtzLesEmM [sage] 2007/02/24(土) 16:45:34 ID:??? データベースは普段MySQLを使ってます。 文字化け対策が面倒くさいので、文字コードはUTF-8(UTF-8N)にしときます。 テーブル名は、message カラムは、 message_id (int not null auto_increment) ←主キーにする name (text) title (text) message (text) create_date (datetime または年月日時分秒の14桁でvarchar(14)) の5個にしてみましょう。 テーブル名やカラム名の付け方は、 複数形(messages)と単数形(message)のセットで命名したりとか、 主キーは単に「id」としておく方が分かりやすいでしょうか? ラーメンの具でメンマが9切れのっているか10切れのっているかという違い…些細なことはどうでもいいか。 http://medaka.5ch.io/test/read.cgi/php/1172205352/24
25: 1 ◆SWtzLesEmM [sage] 2007/02/24(土) 16:53:26 ID:??? MySQL5.0で、phpMyAdminを使って、oop_testというデータベースを1個新設しました。 その中にテーブルを1個作りました。 CREATE TABLE `message` ( `message_id` int(11) NOT NULL, `name` text, `title` text, `message` text, `create_date` datetime default NULL, PRIMARY KEY (`message_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 日付はとりあえずdatetime型にしておきました。 MySQL4.0を使っている人は、上記のSQL文から「DEFAULT CHARSET=utf8」という句を削らないとエラーになると思います。 http://medaka.5ch.io/test/read.cgi/php/1172205352/25
26: 1 ◆SWtzLesEmM [sage] 2007/02/24(土) 17:00:26 ID:??? 画面は、>>23の(1)〜(3)の3画面を用意すればOKかな? 画面(ハリボテ)を先に作ってみて、それにプログラムを付けて動くようにしてみます。 (1)入力ページ input.php (2)一覧ページ list.php (3)詳細ページ message.php http://itpro.nikkeibp.co.jp/article/COLUMN/20070214/261859/ 「HTML画面をそのまま仕様書に」,5カ月で1000画面を構築した就職サイトPuffの高速開発手法 http://medaka.5ch.io/test/read.cgi/php/1172205352/26
27: nobodyさん [sage] 2007/02/24(土) 18:52:22 ID:??? wktk http://medaka.5ch.io/test/read.cgi/php/1172205352/27
28: 1 ◆SWtzLesEmM [sage] 2007/02/24(土) 20:07:40 ID:??? >>25 主キーをオートインクリメント(連番の)の設定にしておくのを忘れてました。orz CREATE TABLE `message` ( `message_id` int(11) NOT NULL auto_increment, `name` text, `title` text, `message` text, `create_date` datetime default NULL, PRIMARY KEY (`message_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; http://medaka.5ch.io/test/read.cgi/php/1172205352/28
29: nobodyさん [sage] 2007/02/25(日) 02:57:19 ID:??? サンプルページ公開して http://medaka.5ch.io/test/read.cgi/php/1172205352/29
30: 2 [sage] 2007/02/25(日) 16:11:09 ID:??? 定番のhelloを表示w class hello { var $aisatu = "こんにちは"; } $re = new hello(); $aisatu = $re->aisatu; echo $aisatu; 読み図ら買ったら適当に改行して http://medaka.5ch.io/test/read.cgi/php/1172205352/30
31: 2 [sage] 2007/02/25(日) 16:19:08 ID:??? #オブジェクト学校のhelloクラスを作る class hello { #このクラスに生徒である$aisatu君がいる #彼に「こんにちは」という言葉を覚えさせる var $aisatu = "こんにちは"; #放課後なので括弧で閉じる } #クラスの風景を覗くための魔法 $re = new hello(); #生徒$aisatu君に「こんにちは」を言わせるための魔法を矢で飛ばす。 #魔法で生徒$aisatu君の$は壊れてしまい、以下のような記述になる。。 $aisatu = $re->aisatu; #魔法にかかった生徒挨拶君をおまえらのディスプレイに召還する。 echo $aisatu; http://medaka.5ch.io/test/read.cgi/php/1172205352/31
32: nobodyさん [sage] 2007/02/26(月) 16:35:48 ID:??? コードの解説なんてしなくても見ればわかる。 「なぜOOP」か、だとか、 こういう場合にOOPが役立つ、というのを具体的なコードで示してくれ http://medaka.5ch.io/test/read.cgi/php/1172205352/32
33: nobodyさん [sage] 2007/02/26(月) 18:41:14 ID:??? namespace は結局 PHP5 では実装されなかったんだね・・・・ 悲しい。悲しすぎる。 http://medaka.5ch.io/test/read.cgi/php/1172205352/33
34: nobodyさん [sage] 2007/02/26(月) 23:07:07 ID:??? MVCのMをOOPでCは手続きVはテンプレート http://medaka.5ch.io/test/read.cgi/php/1172205352/34
35: 1 ◆SWtzLesEmM [age] 2007/02/27(火) 15:21:07 ID:??? >>22 (1)最初はOOPを使わないで掲示板を作ってみる OOPを使わないで作った簡単な掲示板をアップしてみます。 >>26 ファイルは、他に掲示板のトップページと、DB接続関係のデータを入れたファイルを用意しました。 WEBサーバのルート直下にデプロイした場合を想定しています。 /index.html 掲示板のトップページ /db.php データベースの接続関係のデータのファイル /input.php メッセージ入力ページ /list.php メッセージ一覧ページ /message.php メッセージ詳細ページ http://medaka.5ch.io/test/read.cgi/php/1172205352/35
36: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:22:07 ID:??? index.htmlの内容は以下の通りです。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>掲示板メニュー</title> </head> <body> <h1>掲示板メニュー</h1> <div id="menu"> <ul> <li><a href="input.php">メッセージ入力</a></li> <li><a href="list.php">メッセージ一覧</a></li> </ul> </div> </body> </html> http://medaka.5ch.io/test/read.cgi/php/1172205352/36
37: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:24:34 ID:??? db.phpの内容は以下の通りです。 <?php /** * データベース */ //本番環境ドメイン名 define("DOMAIN", "xrea.com");//ドメイン名に含まれる文字列を指定 //MySQL設定(本番環境とテスト環境で切替え) if (ereg(DOMAIN, $_SERVER['SERVER_NAME'])) { //本番環境 define("DBSERVER", "localhost"); define("DBUSER" , "username"); define("DBPASSWORD", "password"); define("DBNAME", "oop_test"); } else { //テスト環境 define("DBSERVER", "localhost"); define("DBUSER" , "test_username"); define("DBPASSWORD", "test_password"); define("DBNAME", "oop_test"); } (以下、続く) http://medaka.5ch.io/test/read.cgi/php/1172205352/37
38: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:25:32 ID:??? db.phpの続きです。 //MySQL接続関数 function db_connect() { // MySQL 接続 $link = mysql_connect(DBSERVER, DBUSER, DBPASSWORD); if (!$link) { die('mysql_connect ERROR: ' . mysql_error()); } // MySQL DB 選択 $db_selected = mysql_select_db(DBNAME, $link); if (!$db_selected) { die ('mysql_select_db ERROR: ' . mysql_error()); } // MySQL 4.1以上 文字コードセット mysql_query('SET CHARACTER SET utf8'); return $db_selected; } http://medaka.5ch.io/test/read.cgi/php/1172205352/38
39: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:26:17 ID:??? db.phpの続き(その2)です。 //MySQLプリペアードステートメント関数(SQLインジェクション対策) //(参考)http://www.php.net/manual/ja/function.mysql-query.php#70686 function mysql_prepare($query, $phs = array()) { $phs = array_map(create_function('$ph', 'return "\'".mysql_real_escape_string($ph)."\'";'), $phs); $curpos = 0; $curph = count($phs)-1; for ($i = strlen($query) - 1; $i > 0; $i--) { if ($query[$i] !== '?') { continue; } if ($curph < 0 || !isset($phs[$curph])) { $query = substr_replace($query, 'NULL', $i, 1); } else { $query = substr_replace($query, $phs[$curph], $i, 1); } $curph--; } unset($curpos, $curph, $phs); return $query; } ?> http://medaka.5ch.io/test/read.cgi/php/1172205352/39
40: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:30:07 ID:??? input.phpの内容は以下の通りです。 <?php /** * メッセージ入力画面 */ require_once("db.php"); db_connect(); // $name = $_POST['name']; $title = $_POST['title']; $message = $_POST['message']; $error_msg = ""; (以下、続く) http://medaka.5ch.io/test/read.cgi/php/1172205352/40
41: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:30:59 ID:??? db.phpの続きです。 //入力値バリデート if (0 < strlen($name) && 0 < strlen($title) && 0 < strlen($message)) { //DB保存処理 $create_date = date("Y/m/d H:i:s"); $sql = "INSERT message SET name = ? , title = ? , message = ? , create_date = ? "; $phs = array($name, $title, $message, $create_date);//プレースホルダーにバインドする変数 $sql_prepare = mysql_prepare($sql, $phs); $result = mysql_query($sql_prepare) or die('SQL Error: ' . mysql_error()); //ページ移動 if ($result == TRUE) { $url = "http://".$_SERVER['HTTP_HOST']."/test2/list.php";//メッセージ一覧 header("Location: ".$url); exit; } } else { $error_msg = "名前、タイトル、メッセージをすべて入力してください。"; } ?> http://medaka.5ch.io/test/read.cgi/php/1172205352/41
42: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:34:29 ID:??? >>41 間違えました。 >db.phpの続きです。 ではなくて、 「input.phpの続きです。」 でした。(・∀・) あと、 >$url = "http://".$_SERVER['HTTP_HOST']."/test2/list.php";//メッセージ一覧 ではなくて、 $url = "http://".$_SERVER['HTTP_HOST']."/list.php";//メッセージ一覧 になります。 =ローカルでは、/test2というフォルダを作ってその中にいれていたので。 =本番環境では、ドキュメントルート直下を想定しているので、/test2/は不要 もう一回訂正してアップします。 http://medaka.5ch.io/test/read.cgi/php/1172205352/42
43: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:40:30 ID:??? >>41の訂正です。 input.phpの続きです。 //入力値バリデート if (0 < strlen($name) && 0 < strlen($title) && 0 < strlen($message)) { //DB保存処理 $create_date = date("Y/m/d H:i:s"); $sql = "INSERT message SET name = ? , title = ? , message = ? , create_date = ? "; $phs = array($name, $title, $message, $create_date);//プレースホルダーにバインドする変数 $sql_prepare = mysql_prepare($sql, $phs); $result = mysql_query($sql_prepare) or die('SQL Error: ' . mysql_error()); //ページ移動 if ($result == TRUE) { $url = "http://".$_SERVER['HTTP_HOST']."/list.php";//メッセージ一覧 header("Location: ".$url); exit; } } else { $error_msg = "名前、タイトル、メッセージをすべて入力してください。"; } ?> (以下、続く) http://medaka.5ch.io/test/read.cgi/php/1172205352/43
44: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:42:00 ID:??? input.phpの続き(その2)です。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>メッセージ入力</title> </head> <body> <h1>メッセージ入力</h1> <div id="menu"> <ul> <li><a href="input.php">メッセージ入力</a></li> <li><a href="list.php">メッセージ一覧</a></li> </ul> </div> <?php echo $error_msg; ?> <div id="input"> <form name="form_input" method="post" action="input.php"> <div id="name">名前<br> <input type="text" name="name" value="<?php echo htmlspecialchars($name); ?>"> </div> <div id="title">タイトル<br> <input type="text" name="title" value="<?php echo htmlspecialchars($title); ?>"> </div> <div id="message">メッセージ<br> <textarea name="message"><?php echo htmlspecialchars($message); ?></textarea> </div> <input type="submit" name="submit" value="送信"> </form> </div> </body> </html> http://medaka.5ch.io/test/read.cgi/php/1172205352/44
45: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:44:03 ID:??? list.phpの内容は以下の通りです。 <?php /** * メッセージ一覧画面 */ require_once("db.php"); db_connect(); // $page = intval($_GET['page']); $max = 10;//1ページ当たりの最大表示件数 //ページング(ページ数は1から数える) $sql = "SELECT count(*) AS total FROM message"; $result = mysql_query($sql) or die('SQL Error: ' . mysql_error()); if ($result) $row = mysql_fetch_array($result); $total = $row['total'];//全メッセージ数 $page_total = ceil($total / $max);//全ページ数 if ($page < 1) $page = 1; if ($page_total < $page) $page = $page_total; //メッセージ取得 $sql = "SELECT * FROM message ORDER BY create_date DESC LIMIT ".(($page - 1) * $max) .",".$max; $result = mysql_query($sql) or die('SQL Error: ' . mysql_error()); ?> http://medaka.5ch.io/test/read.cgi/php/1172205352/45
46: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:45:25 ID:??? list.phpの続きです。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>メッセージ一覧</title> </head> <body> <h1>メッセージ一覧</h1> <div id="menu"> <ul> <li><a href="input.php">メッセージ入力</a></li> <li><a href="list.php">メッセージ一覧</a></li> </ul> </div> <div id="paging"> <?php //ページング処理 echo "全".$total."件"; echo "(ページ".$page."目)"; for ($i = 1; $i <= $page_total; $i++) { echo "<a href='list.php?page=".$i."'>".$i."</a> "; } ?> </div> http://medaka.5ch.io/test/read.cgi/php/1172205352/46
47: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:46:10 ID:??? list.phpの続き(その2)です。 <table border="1" cellpadding="5"> <tr bgcolor="#FFFF99"> <td>タイトル</td> <td>投稿者名</td> <td>投稿日</td> </tr> <?php //メッセージ一覧 while ($rows = mysql_fetch_array($result)) { echo "<tr>"; echo "<td><a href='message.php?message_id=".htmlspecialchars($rows['message_id'])."'>".htmlspecialchars($rows['title'])."</a></td>"; echo "<td>".htmlspecialchars($rows['name'])."</td>"; echo "<td>".htmlspecialchars($rows['create_date'])."</td>"; echo "</tr>"; } ?> </table> </body> </html> http://medaka.5ch.io/test/read.cgi/php/1172205352/47
48: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:47:39 ID:??? message.phpの内容は以下の通りです。 <?php /** * メッセージ詳細画面 */ require_once("db.php"); db_connect(); // $message_id = intval($_GET['message_id']); //メッセージ取得 $sql = "SELECT * FROM message WHERE message_id = ?"; $phs = array($message_id);//プレースホルダーにバインドする変数 $sql_prepare = mysql_prepare($sql, $phs); $result = mysql_query($sql_prepare) or die('SQL Error: ' . mysql_error()); if ($result) { $row = mysql_fetch_array($result); } ?> http://medaka.5ch.io/test/read.cgi/php/1172205352/48
49: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:49:23 ID:??? message.phpの続きです。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>メッセージ詳細</title> </head> <body> <h1>メッセージ詳細</h1> <div id="menu"> <ul> <li><a href="input.php">メッセージ入力</a></li> <li><a href="list.php">メッセージ一覧</a></li> </ul> </div> <table border="1" cellpadding="5"> <tr> <td bgcolor="#FFFF99">投稿者名</td> <td><?php echo htmlspecialchars($row['name']); ?></td> </tr> http://medaka.5ch.io/test/read.cgi/php/1172205352/49
50: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:50:12 ID:??? message.phpの続き(その2)です。 <tr> <td bgcolor="#FFFF99">投稿日</td> <td><?php echo htmlspecialchars($row['create_date']); ?></td> </tr> <tr> <td bgcolor="#FFFF99">タイトル</td> <td><?php echo htmlspecialchars($row['title']); ?></td> </tr> <tr> <td bgcolor="#FFFF99">メッセージ</td> <td><?php echo nl2br(htmlspecialchars($row['message'])); ?></td> </tr> </table> </body> </html> http://medaka.5ch.io/test/read.cgi/php/1172205352/50
51: 1 ◆SWtzLesEmM [sage] 2007/02/27(火) 15:59:41 ID:??? それでは、次行ってみよう! >>22 (2)次にOOPで同じ掲示板を作ってみる >>34 PHPコードとHTML表示を一緒にしてありますが、OOPではテンプレートシステムを使って、PHPコードとHTML表示部分を分離して、MVCにしてみたいです。 どういうクラスを作ればいいのか良く分かりません>< (1)コントローラー(+アクション)→input、list、message (2)モデル→データベース接続処理も1つのクラスにするのでしょうか? (4)ビュー→テンプレートシステムへの出力 というかんじで3個のクラスが必要でしょうか? それぞれのクラスに必要なプロパティとメソッドを何にするか? クラスを考えて、UMLでクラス図を作ってみたいです。 http://medaka.5ch.io/test/read.cgi/php/1172205352/51
52: nobodyさん [sage] 2007/02/27(火) 22:54:58 ID:??? がんばってるなあ。 おれもがんばろう。 http://medaka.5ch.io/test/read.cgi/php/1172205352/52
53: nobodyさん [sage] 2007/02/28(水) 03:12:15 ID:??? わかりにくいからWebサイトにまとめてくれ。PHP使いなんだし http://medaka.5ch.io/test/read.cgi/php/1172205352/53
54: 1 ◆SWtzLesEmM [age] 2007/02/28(水) 20:49:38 ID:??? >>53 まとめサイトを設置しました。 ttp://kameleon.s241.xrea.com/dokuwiki/doku.php http://medaka.5ch.io/test/read.cgi/php/1172205352/54
55: nobodyさん [sage] 2007/02/28(水) 22:48:34 ID:??? 最終的にMVCな構成を目標に 少しずつリファクタリングしていけばよいと思う とりあえずDBアクセスを一箇所にまとめるモデルを作ってみるといいんじゃない ・全件取得 ・1件取得 ・1件追加 できるMessageクラスとかを作ってそこにDBアクセス(SQL)をまとめれ http://medaka.5ch.io/test/read.cgi/php/1172205352/55
56: nobodyさん [] 2007/03/03(土) 13:53:29 ID:Ej/v+KpC 期待上げ http://medaka.5ch.io/test/read.cgi/php/1172205352/56
57: nobodyさん [] 2007/03/04(日) 04:17:32 ID:xhaosu8B 期待 http://medaka.5ch.io/test/read.cgi/php/1172205352/57
58: nobodyさん [sage] 2007/03/11(日) 11:30:29 ID:??? OOP勉強したいなら、実力不足のやつが書いたガラクタ掲示板スクリプトを 読むより、有名なオープンソースのスクリプトを読めばいいじゃん。 そもそも>>1の意味不明な独善なんかに付き合わなくてもOOPに関する情報 はいくらでも手にはいるし。 http://medaka.5ch.io/test/read.cgi/php/1172205352/58
59: nobodyさん [sage] 2007/03/11(日) 23:56:02 ID:??? ど素人に肥大したコードを読ませて理解できると思ってる思考回路がカコイイ! http://medaka.5ch.io/test/read.cgi/php/1172205352/59
60: nobodyさん [] 2007/03/12(月) 08:27:35 ID:cm9vlrfS >>59 ど素人はみんな、自分みたいな学習意欲も向上心もない人間だと思ってる 思考回路がカコイイ! http://medaka.5ch.io/test/read.cgi/php/1172205352/60
61: nobodyさん [sage] 2007/03/12(月) 09:16:45 ID:??? >>60 思考回路がカコイイ! http://medaka.5ch.io/test/read.cgi/php/1172205352/61
62: nobodyさん [sage] 2007/03/12(月) 09:57:59 ID:??? >>59-61 全員カコワルイ!! 俺はカコイイ!! http://medaka.5ch.io/test/read.cgi/php/1172205352/62
63: nobodyさん [sage] 2007/03/12(月) 13:37:56 ID:??? >>1-62 全員カコイイ!! 俺はカコワルイ!! http://medaka.5ch.io/test/read.cgi/php/1172205352/63
64: nobodyさん [sage] 2007/03/12(月) 14:07:03 ID:??? で、結局荒れ放題になり>>1の独善は無事終了したのだった。 ちゃんちゃん。 http://medaka.5ch.io/test/read.cgi/php/1172205352/64
65: 1 ◆SWtzLesEmM [age] 2007/05/12(土) 03:12:14 ID:??? >>55 DBにアクセスするためのクラスを作ろうと思って、とりあえずdb.phpをクラスの形に変えてみようと試みました。 だけど、コンストラクタでエラーが出てストップ! Fatal error: Cannot access empty property in /…/test.php on line 18 なんでエラーになるのか?よく分からなくて、PHP5のコンストラクタについて調査していたら、サンプルになりそうなDBクラスの解説記事がありました。 http://www.bnote.net/php/php/09_db_class.shtml ↑これをソックリ真似すれば、DBクラスは何とかなるかな? ところで、このbnoteというサイトのPHP解説記事には、掲示板を作ってみるサンプルがあり、参考になりそうです。 http://www.bnote.net/php/php_idx.shtml >PHPでフォーラムを作ろう! http://medaka.5ch.io/test/read.cgi/php/1172205352/65
66: nobodyさん [age] 2007/05/12(土) 16:09:18 ID:??? 中傷されている>>1だが、 普通に>>1のおかげでだいぶいい情報が手に入った。 曖昧だったクラスがなんとか分かりそうだよ。 ありがとー PHPでわからない人は情報が足りないのかもな。 似てるJAVAで本格的なものを見てみると分かるのかも。 昔、歴史で年表同士のつながりが薄くて分かりづらかったように、 もっと詳しく高校の歴史くらいのをみれば分かりやすい。 http://medaka.5ch.io/test/read.cgi/php/1172205352/66
67: nobodyさん [] 2007/05/12(土) 23:32:04 ID:s118dfiw なんていうか「こういうときにはこういう設計をします」っていう 具体的な情報がほしいよな 俺は車なんかプログラミングしないっての http://medaka.5ch.io/test/read.cgi/php/1172205352/67
68: nobodyさん [] 2007/05/14(月) 00:46:15 ID:4QCW9ZwU 最近ちょっとだけ解ってきた。 なぜOOPなのかと言えば 再利用とメンテナンス、拡張がやりやすい(やりやすく作ることが出来る)ということがすごくて、 そのためにカプセル化とポリモーフィズムがあって ポリモーフィズムを実現(保証)するために継承や、インターフェイスや抽象クラスがあるって感じなのかな? PHPによるデザインパターンは読んでみても良いと思う。 あと、ゼンドフレームワーク勉強用にZFで動くブログソフトみたいのあるから、それの仕組みと、ZFのソース(全部はきついけど関係あるところだけ) を見てみると、結構勉強になると思う。 ttp://www.itmedia.co.jp/enterprise/articles/0702/28/news028.html ttp://www.itmedia.co.jp/enterprise/articles/0703/05/news013.html ttp://www.itmedia.co.jp/enterprise/articles/0703/08/news018.html 記事がちょっと古いから最新バージョンと微妙に違うけど。 まあ、このフレームワークが良いか悪いかは別にして(まだベータだし) OOPバリバリなので、勉強になること間違いなし! http://medaka.5ch.io/test/read.cgi/php/1172205352/68
69: nobodyさん [sage] 2007/05/15(火) 15:55:34 ID:??? しかし PHP関連の本でOOPをわかりやすく書いてあるのが 「ない!」 お勧め教えて http://medaka.5ch.io/test/read.cgi/php/1172205352/69
70: nobodyさん [sage] 2007/05/15(火) 16:01:33 ID:??? 本なんか読むよりPEARやフレームワークのソース読んで 勉強しながら自分なりに書いていけ、金かからないしだしそれが一番の近道 気が付いたらOOPなんて空気のように有って当たり前になるもんだから http://medaka.5ch.io/test/read.cgi/php/1172205352/70
71: nobodyさん [sage] 2007/05/15(火) 16:06:06 ID:??? わかりにくいの例として スコープ演算子(static ::)は2冊読んでもチンプンカンプン そこでぐぐる先生に聞くと http://homepage3.nifty.com/gomi_doji/scopen.htm PHPではないが、ナルホドナルホドと理解できる オブジェクト指向の概要も http://phpspot.net/php/pg%83I%83u%83W%83F%83N%83g%8Ew%8C%FCPHP.html を読むとナルホドナルホドだが、本は意味不明になる 糞った本しか読んでいないかもしれないが一応書いておく 「PHP5プログラミング エキスパート編」 //最強の意味不明 「MySQL4/PHP5によるWebデータベース構築」 //わかりやすいがODPの章になると意味不明 http://medaka.5ch.io/test/read.cgi/php/1172205352/71
72: nobodyさん [sage] 2007/05/15(火) 16:08:18 ID:??? 書きながら次第にむかつき度が増加して誤字だらけになった(怒 >>70 それ疲れる http://medaka.5ch.io/test/read.cgi/php/1172205352/72
73: nobodyさん [sage] 2007/05/15(火) 17:01:49 ID:??? >>69 独習PHPのクラスらへんの説明は中々分かりやすいよ。 作者があまりいいとはいえんが、ファーストステップにはいい感じ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/73
74: nobodyさん [sage] 2007/05/22(火) 15:14:54 ID:??? 同じ事を色々な言葉で表現するから迷うずら PHPの本読むよりJAVAの本読んだほうが理解できる罠。 http://medaka.5ch.io/test/read.cgi/php/1172205352/74
75: nobodyさん [sage] 2007/05/28(月) 14:46:00 ID:??? 自分が作るだけなら手続き型でいいけど 人の作ったライブラリ使いたいから 最低限、何が書いてあって何をしているのか読めるようになりたい http://medaka.5ch.io/test/read.cgi/php/1172205352/75
76: nobodyさん [sage] 2007/05/29(火) 05:34:16 ID:??? 答えが出てるじゃないか。その使いたいライブラリのコードを読め http://medaka.5ch.io/test/read.cgi/php/1172205352/76
77: nobodyさん [] 2007/06/05(火) 12:23:56 ID:/w569Zaf OOPS http://medaka.5ch.io/test/read.cgi/php/1172205352/77
78: nobodyさん [age] 2007/06/05(火) 19:15:58 ID:??? XOOPS http://medaka.5ch.io/test/read.cgi/php/1172205352/78
79: nobodyさん [] 2007/06/11(月) 22:06:39 ID:2dWIuVC4 >>65に誰もつっこまないのかよ!! DBアクセスの為のクラス書くのかw おそらくPHPインストール時に君のHDDの中にすでに入ってる訳だが… しかもあらゆるDBに同じ書式でアクセス出来るやつが… http://medaka.5ch.io/test/read.cgi/php/1172205352/79
80: nobodyさん [sage] 2007/06/11(月) 23:45:37 ID:??? >>79 なんてやつ? http://medaka.5ch.io/test/read.cgi/php/1172205352/80
81: nobodyさん [sage] 2007/06/12(火) 00:15:06 ID:??? PEARのソースは読まない方が身のため http://medaka.5ch.io/test/read.cgi/php/1172205352/81
82: nobodyさん [] 2007/06/12(火) 06:55:41 ID:e4tfCBN5 79は勘違いしてるが、彼がいいたいのはPearのDBクラスのことだろう http://medaka.5ch.io/test/read.cgi/php/1172205352/82
83: nobodyさん [sage] 2007/06/12(火) 09:31:07 ID:??? 82が勘違いだろ。 単にPDOだろ http://medaka.5ch.io/test/read.cgi/php/1172205352/83
84: 1 ◆SWtzLesEmM [age] 2007/06/12(火) 10:24:12 ID:??? >>73 情報提供どうもありがとうございます。 独習PHPは、図書館でかりて読んでみました。 オブジェクト構文の説明は分かりやすいと思いました。 >>79 DBにアクセスするクラスも勉強のため練習で作ってみようと思いました。 その次に、O/Rマッパーの使い方を練習してみることになるでしょうか? >>82 PHP5に標準で用意されているPDOのことですね。 http://jp2.php.net/pdo PHP Data Objects (PDO) 拡張モジュールは、 PHP の中からデータベースにアクセスするための軽量で高性能な インターフェイスを定義します。 PDO は PHP 5.1 以降にバンドルされており、PHP 5.0 では PECL 拡張モジュールとして使用可能です。 PDO は PHP 5 の新機能である オブジェクト指向機能を使用しており、それより前のバージョンの PHP では動作しません。 http://medaka.5ch.io/test/read.cgi/php/1172205352/84
85: nobodyさん [sage] 2007/06/12(火) 10:56:05 ID:??? mysqliとどっちがいい? http://medaka.5ch.io/test/read.cgi/php/1172205352/85
86: nobodyさん [sage] 2007/06/12(火) 17:53:32 ID:??? ふとおもったんだが、>>1はできるんじゃないのか。 http://medaka.5ch.io/test/read.cgi/php/1172205352/86
87: nobodyさん [sage] 2007/06/17(日) 01:20:06 ID:??? 被害者増やさないように書いておく。 「PHPデザインパターン入門」は買うな。 最近買った中で最低レベルの悪書。 どっかの英語ページを機械翻訳したようなトンチンカンな用語説明にまじって 何故かApacheとPHPのインストール方法だけが丁寧な日本語で書かれている。 あとはデザインパターン図が羅列してあるだけ。解説ほぼ無し。 3流大学生のコピペ論文を彷彿とさせる。 こんなの真剣に呼んでも絶対わかるようにはならない。 OOP用語の説明は何故かちゃんとしてないのに php.iniにページさかれてるけど 網羅して無くて中途半端でページ稼ぎとしか思えない。 中身薄くて有名なヤマダヨウカン本の方がマシに感じるレベル。 http://medaka.5ch.io/test/read.cgi/php/1172205352/87
88: nobodyさん [sage] 2007/06/17(日) 01:28:20 ID:??? なんか良く読むと、この本は解説の日本語が オブジェクト指向で書かれてる気がした。 多分最初にパターン名を記載した時点で、作者の頭の中では 記載されてるページを呼び出してるんだろうと思えてきた。 解説するための日本語はプロシージャ指向で書いてくれと 小一時間問い詰めたい。 この本理解するには色んな本を買って、全部理解した後じゃないと 読めない。意味ねえじゃん。 http://medaka.5ch.io/test/read.cgi/php/1172205352/88
89: nobodyさん [sage] 2007/06/17(日) 01:54:28 ID:??? 軽いフレームワークいじって使うのが一番いいオブジェクト指向の勉強だよ http://medaka.5ch.io/test/read.cgi/php/1172205352/89
90: nobodyさん [sage] 2007/06/17(日) 14:22:50 ID:??? ウェブアプリにオブジェクト指向なんていらないよ。どうせ文字列を加工してデータベースのテーブルのカラムに並べるだけなんだから。 http://medaka.5ch.io/test/read.cgi/php/1172205352/90
91: nobodyさん [sage] 2007/06/17(日) 18:51:52 ID:??? じゃどういうときに必須なんよ http://medaka.5ch.io/test/read.cgi/php/1172205352/91
92: nobodyさん [sage] 2007/06/24(日) 17:09:42 ID:??? オブジェクト指向と言う言葉にまどわされず、 クラスの勉強をすればいいんだよ。 単に、呼び出してるだけだから。 http://medaka.5ch.io/test/read.cgi/php/1172205352/92
93: nobodyさん [sage] 2007/06/24(日) 19:32:38 ID:??? PEARをサンプルみながら見よう見まねでインスタンス作って なんだかんだで実際動いてるんだけど何してるかイマイチ理解出来てないんだよね functionの中でインスタンス作るとその外側ではやっぱアクセスできないのかな PEARDBのインスタンスがあっちゃこっちゃに散らばっちゃって困る http://medaka.5ch.io/test/read.cgi/php/1172205352/93
94: nobodyさん [sage] 2007/06/25(月) 12:32:57 ID:??? >>93 プロパティに入れれ http://medaka.5ch.io/test/read.cgi/php/1172205352/94
95: 1 ◆SWtzLesEmM [age] 2007/07/06(金) 14:33:24 ID:??? >>68 >拡張がやりやすい(やりやすく作ることが出来る) そうみたいですね。 http://www.amazon.co.jp/dp/4822281957/ 「オブジェクト指向でなぜつくるのか」 という本にも、クラスを使うメリットが同じように説明されていました。(・∀・) >>74 Javaの本だと http://www.amazon.co.jp/dp/4797331828/ 「やさしいJava」をすすめられました。 >>86 (σ・Д・)σプログラミング初心者ですΣ(゚Д゚*)=3 >>89 Zend Frameworkの正式版が出ましたね☆ http://framework.zend.com/manual/ja/ シンプルなフレームワークを検索したら、CodeIgniterというのがありました。 http://userguide.cilab.info/ http://medaka.5ch.io/test/read.cgi/php/1172205352/95
96: nobodyさん [] 2007/07/08(日) 18:20:46 ID:XFKJF1H9 最近このスレが怖くて見れん俺ガイル なんでそんな成長早いんだよ・・・おかしいだろ・・・orz http://medaka.5ch.io/test/read.cgi/php/1172205352/96
97: テレビできたよー [] 2007/07/10(火) 15:53:51 ID:ZIdzImz8 class TV { var $channel; var $state; var $singleton; function TV() { $this->channel = 1; $this->state = false; } function on() { if(!$this->state) { $this->state = true; echo "電源オン<br />"; $this->reflect(); } else { echo "既に電源はオンになっています<br />"; } } function off() { if($this->state) { $this->state = false; echo "電源オフ<br />"; } else { echo "既に電源はオフになっています<br />"; } } http://medaka.5ch.io/test/read.cgi/php/1172205352/97
98: テレビできたよー [] 2007/07/10(火) 15:54:22 ID:ZIdzImz8 function reflect($c = null) { if($this->state) { if(!empty($c)) { $this->channel = $c; } echo $this->channel . " チャンネルを写します<br />"; } else { echo "電源が入っておりません<br />"; } } } $tv = new TV; $tv->on(); $tv->reflect(8); $tv->on(); $tv->on(); $tv->off(); $tv->off(); $tv->reflect(5); $tv->on(); http://medaka.5ch.io/test/read.cgi/php/1172205352/98
99: nobodyさん [sage] 2007/07/11(水) 10:41:20 ID:??? 例外投げるようにすれば? http://medaka.5ch.io/test/read.cgi/php/1172205352/99
100: 1 ◆SWtzLesEmM [age] 2007/07/11(水) 12:59:29 ID:??? 例外処理 http://www.phppro.jp/word/E4BE8BE5A496E587A6E79086 2. PHPで例外処理 http://www.phppro.jp/phptips/vol45/eb49e8a31e9132d98a5a7db3df4663e4 PHP5の基本 > 例外処理 http://www.shigeweb.jp/php/project_p/?section=php5oop&page=exception phpspot - 例外処理 http://phpspot.net/php/pg%97%E1%8AO%8F%88%97%9D.html PHP4ではエラー処理といえば、 if ( ($err = func()) != "" ) { die("エラーです"); } のように戻り値のチェックをしていましたが、エラーというものは、呼び出し側がエラー制御を行うのではなく、呼ばれた側で、どういうエラーがあったか、というものがあった方が自然で、呼ばれた側がエラー処理を行うため、モジュールの場合より再利用性が高くなるでしょう。 更に上記では、どういうエラーが起こってエラーが出ているのかということが想像しにくいですね。 そこで try〜catch です。 ■例外処理 http://www.atmarkit.co.jp/flinux/special/php5/php5d.html プログラミングにエラー処理は避けて通れない事項だ。 とはいえ、関数やメソッドからの戻り値を毎回エラーチェックするのは煩雑で面倒でもある。 その煩雑さを回避するため、文法として例外処理を持っている言語もある。 PHP5もそれに倣って、言語仕様として例外処理をサポートした。 文法的にはC++やJavaと同様に、try{ }で投げられた例外をcatch{ }で処理するという流れになる。 ↑とのことですが、汎用性のある関数やメソッドにしたい場合、エラーが発生したときの処理を書く場所は、関数やメソッドを使う方(呼び出す側)にすることもあるでしょうか? =戻り値をチェックするというのは、古いやり方なんでしょうか? http://medaka.5ch.io/test/read.cgi/php/1172205352/100
101: 1 ◆SWtzLesEmM [age] 2007/07/11(水) 13:07:20 ID:??? >>96 PHPプロのメルマガ読んで、知ったかぶりなだけですw お互いがんばりましょう☆(・∀・) http://medaka.5ch.io/test/read.cgi/php/1172205352/101
102: nobodyさん [sage] 2007/07/11(水) 14:16:38 ID:??? いやさ,まず公式マニュアルを読む癖を付けようぜ http://medaka.5ch.io/test/read.cgi/php/1172205352/102
103: nobodyさん [sage] 2007/07/11(水) 14:44:53 ID:??? MVCじゃないとOOPなんて意味ないですかr http://medaka.5ch.io/test/read.cgi/php/1172205352/103
104: nobodyさん [sage] 2007/07/11(水) 17:30:14 ID:??? ( д) ...。。 http://medaka.5ch.io/test/read.cgi/php/1172205352/104
105: nobodyさん [sage] 2007/07/12(木) 02:57:31 ID:??? MVCもデザインパターンの一種じゃなかったっけ? http://medaka.5ch.io/test/read.cgi/php/1172205352/105
106: nobodyさん [sage] 2007/07/12(木) 08:06:18 ID:??? >>100 なんかphpspotのその文はおかしいな。 エラー処理は例外を使おうがそうじゃなかろうが変わらない。 呼ばれた側はどういうエラーがあったか返す責任があるし、 呼んだ側は返ってきたエラーをチェックする責任がある。 エラーが起きた時の挙動を自分で決めれるならその場で処理すれば良いし、 そこではまだ決められないならさらに上位へreturnなりthrowすれば良い。 http://medaka.5ch.io/test/read.cgi/php/1172205352/106
107: nobodyさん [] 2007/07/14(土) 15:28:38 ID:w3CTKtks OOPってのはアプリケーションをモノに見立てて、それを構成している部品をクラスとして定義する、ってとこまではなんとなく理解した。 例外処理?なにそれうまいの? http://medaka.5ch.io/test/read.cgi/php/1172205352/107
108: nobodyさん [sage] 2007/07/14(土) 18:34:23 ID:??? ダンボールの味がするお http://medaka.5ch.io/test/read.cgi/php/1172205352/108
109: nobodyさん [sage] 2007/07/14(土) 19:32:25 ID:??? おまいらオブジェクト指向に騙されてるよ。ただのデータ型に過ぎない。 http://medaka.5ch.io/test/read.cgi/php/1172205352/109
110: nobodyさん [] 2007/07/14(土) 19:46:31 ID:w3CTKtks 今、習作としてプロフィールスクリプト(っていうのも大袈裟なぐらいショボイやつ)を書いてるんだけど、どうにも悩む。悩む。 とりあえず、 -質問と答え(Entry) --セッタ(SetQuestion,SetAnswer) --ゲッタ(GetQuestion,GetAnswer) -それらのEntryを編集したり、操作したりする(ManageEntry) --POSTされたデータにEntryの値を変更する(EditEntry) -プロフィール自体(Profiel) --質問と答えを出力(ViewProfiel) こんなクラスたちを作ったんだけどなんかおかしい気がしてならない。 とくにManageEntryのとことか。 ManageEntryでEntryオブジェクトの配列Entriesを作っといてそれをそのクラス内で操作とか?は?え? OOPムズイ、ナキタイ スレ汚しスマソ http://medaka.5ch.io/test/read.cgi/php/1172205352/110
111: nobodyさん [sage] 2007/07/14(土) 21:29:40 ID:??? どんな物を作ってるのかよく分からないけど ぱっと見で確実に言える事は、個別のクラスが多すぎ。 半分くらい継承とメソッドの追加で済みそう。 今のままだと拡張もやり難そう。 プロフィールが"profiel"なのはつっこんだ方が良いのかな。 CakeとかSynfonyみたいな、ライブラリじゃないフレームワークを 使い込んでソース読んだら、どう設計したらよいか一気に分かるよ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/111
112: nobodyさん [] 2007/07/14(土) 22:22:33 ID:w3CTKtks 継承とメソッドの追加ってどうやるんですか><; 正直どうやったらいいのか全くわからん。 プロフィール?え?あ?あはあは。 http://medaka.5ch.io/test/read.cgi/php/1172205352/112
113: nobodyさん [sage] 2007/07/15(日) 00:13:47 ID:??? きめぇ http://medaka.5ch.io/test/read.cgi/php/1172205352/113
114: nobodyさん [sage] 2007/07/15(日) 00:19:07 ID:??? Synfony はつっこんだ方(ry http://medaka.5ch.io/test/read.cgi/php/1172205352/114
115: 1 ◆SWtzLesEmM [age] 2007/07/26(木) 10:21:49 ID:??? >>106 >呼ばれた側はどういうエラーがあったか返す責任があるし、 >呼んだ側は返ってきたエラーをチェックする責任がある。 なるほど〜(・∀・) 呼ぶ側と呼ばれた側のそれぞれでエラーの対処があれば、手堅いですね! 大変参考になりました。 http://medaka.5ch.io/test/read.cgi/php/1172205352/115
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 779 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.011s