◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

PHPでOOP->画像>3枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/php/1172205352/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

11 ◆SWtzLesEmM
2007/02/23(金) 13:35:52ID:???
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^)/
2nobodyさん
2007/02/23(金) 13:38:15ID:???
初心者にもわかるようにメリットぐらいかいてよ・・。
3nobodyさん
2007/02/23(金) 13:41:55ID:???
インスタンスとインヘリタンスがまぎわらしい(なぜか変換・・・
41 ◆SWtzLesEmM
2007/02/23(金) 13:42:26ID:???
オブジェクトと関数の本質的な違いと使い分け
http://d.hatena.ne.jp/toku-hiro/20060826

var とか this って何だ?
http://d.hatena.ne.jp/toku-hiro/20060902

アクセサメソッド
http://d.hatena.ne.jp/toku-hiro/20061022

継承、 オブジェクトコンポジション
http://d.hatena.ne.jp/toku-hiro/20061129
http://d.hatena.ne.jp/toku-hiro/20061203
51 ◆SWtzLesEmM
2007/02/23(金) 13:51:33ID:???
>>2
http://d.hatena.ne.jp/toku-hiro/20060826
この説明見てなるほどな〜〜〜!と思いました^^

>(1) オブジェクトと関数の本質的な違いと使い分け
>コーディング上の本質的な違いは「変数を保持できるか否か」に尽きます!
>関数を定義するときには、(グローバル変数を除き)引数として関数の外部から渡し、return で返すことしかできませんが、クラスは内部で変数を定義でき、クラスの実体のオブジェクトはどこからでも内部変数を引き出すことができます。
>定義関数の return であれもこれも返したいのにうまく返せず、煩雑な配列に格納して返す…といったことが減ると思います。
>あれもこれも引数として渡したいとき、または、あれもこれもreturnしたいときは、関数よりクラスの方が遥かに簡単です。

「クラス」という仕組は便利そうですね。クラスを考えた奴、偉い!
61 ◆SWtzLesEmM
2007/02/23(金) 13:54:53ID:???
>>3
なんかプログラミングって、カタカナ用語がたくさん登場しますよね><
クラスって聞いたら学校の「教室」を連想しちゃう><
7nobodyさん
2007/02/23(金) 15:12:49ID:???
Webでオブジェクト指向
http://pc10.2ch.net/test/read.cgi/php/1133489897/

こっちじゃ何故駄目なんだ?
8nobodyさん
2007/02/23(金) 16:25:04ID:???
>>1
>>5
自作自演乙w
9nobodyさん
2007/02/23(金) 16:52:36ID:???
トリップ出してるのに自作自演もくそもあるのかw
101 ◆SWtzLesEmM
2007/02/23(金) 19:44:43ID:???
>>7
>Webでオブジェクト指向
>http://pc10.2ch.net/test/read.cgi/php/1133489897/
>こっちじゃ何故駄目なんだ?

そっちも参考に眺めています。
あと、プログラマー板にもあるオブジェクト指向関係のスレもちょっと眺めています。

PHPに的を絞った情報が欲しいので、専用のスレを立ててみました。
もちろん、JavaやRuby、Pythonとかも使えればいいけど、そこまで手を広げる時間がないので、とりあえず今の段階ではPHPで勉強。
PHPを使っていて、オブジェクト指向プログラミングのやり方を勉強したい人がいたら一緒に勉強していきましょう。
よろしく(・∀・)
11nobodyさん
2007/02/23(金) 21:14:52ID:???
>>9
ちげーよ
自分のサイトの宣伝して
「この説明見てなるほどな〜〜〜!と思いました^^」
と書いてるところがだよ
12nobodyさん
2007/02/23(金) 21:34:47ID:???
>>11
OOPのメリット聞かれたから自分で見つけた参考サイト出して自分の所感言っただけだろ。
聞くだけで何もしない厨より、アクティブな>>1に好感が持てたが。

って擁護すると自演って言うのかな?
13nobodyさん
2007/02/23(金) 22:38:47ID:???
まあ、PHPでOOPなんてのは、今までて来たtoku-hiroさん以外にも
書いている人は多そうだから(俺は知らないけど)
他のも出せば、>>1の疑いは晴れるんじゃないかな。
141 ◆SWtzLesEmM
2007/02/23(金) 23:18:48ID:???
Googleで「PHP オブジェクト指向」を検索
http://www.google.co.jp/search?q=PHP+%83I%83u%83W%83F%83N%83g%8Ew%8C%FC

よさげなサイトをピックアップしてみよう!
151 ◆SWtzLesEmM
2007/02/23(金) 23:23:43ID:???
PHPのオンラインマニュアルがよくまとまってますねw(当たり前?)

http://jp2.php.net/zend-engine-2.php
第19章 クラスとオブジェクト (PHP 5)
161 ◆SWtzLesEmM
2007/02/23(金) 23:49:00ID:???
http://www.mogurin.net/index/php.obj.inc.html
PHP4のOOPについて、簡単な説明がありました。

PHP5のOOPは、PHP4のOOPに変更が加えられているので、ちょっと違う部分があります。
171 ◆SWtzLesEmM
2007/02/24(土) 00:03:56ID:???
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/
「委譲」などの説明がありました。

今の段階では、ちょっとよく理解できませんでしたがこんな話もあるんですね。
18nobodyさん
2007/02/24(土) 00:47:36ID:???
初心者のおれも学習するから講義すすめてくれ
19nobodyさん
2007/02/24(土) 01:05:02ID:???
>>18
わかった。

オブジェクトの
オブとはすなわち飯富。飯富厩舎所属だということ。

オブジェクトの
ジェクトトはすなわちジェクト。FF10のジェクトだということ。

20nobodyさん
2007/02/24(土) 13:35:58ID:???
オブジェクトを利用すると何がいいのか一言でまとめて
21nobodyさん
2007/02/24(土) 13:43:25ID:???
プロとしての自信が持てるようになります
221 ◆SWtzLesEmM
2007/02/24(土) 16:26:54ID:???
とりあえず簡単なWEBアプリケーションを作りながらOOPの勉強をしてみたいです。
OOPで掲示板を作ってみたいです。

(1)最初はOOPを使わないで掲示板を作ってみる
(2)次にOOPで同じ掲示板を作ってみる
という流れにすると、対比によってOOPが理解しやすくなるでしょうか?
=始めに完成形ありきと。
231 ◆SWtzLesEmM
2007/02/24(土) 16:34:22ID:???
掲示板の機能としては、

(1)名前とタイトルと本文を入力&投稿できる。
(2)投稿の一覧(タイトル+投稿日時)が表示できる。
(3)投稿の詳細内容(1つ1つの投稿を個別に閲覧)が表示できる。

という最低限の機能で作ってみて、
後から徐々に機能を追加して拡張してみましょう。
241 ◆SWtzLesEmM
2007/02/24(土) 16:45:34ID:???
データベースは普段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切れのっているかという違い…些細なことはどうでもいいか。
251 ◆SWtzLesEmM
2007/02/24(土) 16:53:26ID:???
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」という句を削らないとエラーになると思います。
261 ◆SWtzLesEmM
2007/02/24(土) 17:00:26ID:???
画面は、>>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の高速開発手法
27nobodyさん
2007/02/24(土) 18:52:22ID:???
wktk
281 ◆SWtzLesEmM
2007/02/24(土) 20:07:40ID:???
>>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 ;
29nobodyさん
2007/02/25(日) 02:57:19ID:???
サンプルページ公開して
302
2007/02/25(日) 16:11:09ID:???
定番のhelloを表示w
class hello {
var $aisatu = "こんにちは";
}

$re = new hello();
$aisatu = $re->aisatu;
echo $aisatu;

読み図ら買ったら適当に改行して
312
2007/02/25(日) 16:19:08ID:???
#オブジェクト学校のhelloクラスを作る
class hello {


#このクラスに生徒である$aisatu君がいる
#彼に「こんにちは」という言葉を覚えさせる
var $aisatu = "こんにちは";


#放課後なので括弧で閉じる
}




#クラスの風景を覗くための魔法
$re = new hello();


#生徒$aisatu君に「こんにちは」を言わせるための魔法を矢で飛ばす。
#魔法で生徒$aisatu君の$は壊れてしまい、以下のような記述になる。。
$aisatu = $re->aisatu;


#魔法にかかった生徒挨拶君をおまえらのディスプレイに召還する。
echo $aisatu;
32nobodyさん
2007/02/26(月) 16:35:48ID:???
コードの解説なんてしなくても見ればわかる。
「なぜOOP」か、だとか、
こういう場合にOOPが役立つ、というのを具体的なコードで示してくれ
33nobodyさん
2007/02/26(月) 18:41:14ID:???
namespace は結局 PHP5 では実装されなかったんだね・・・・
悲しい。悲しすぎる。
34nobodyさん
2007/02/26(月) 23:07:07ID:???
MVCのMをOOPでCは手続きVはテンプレート
351 ◆SWtzLesEmM
2007/02/27(火) 15:21:07ID:???
>>22 (1)最初はOOPを使わないで掲示板を作ってみる
OOPを使わないで作った簡単な掲示板をアップしてみます。

>>26
ファイルは、他に掲示板のトップページと、DB接続関係のデータを入れたファイルを用意しました。
WEBサーバのルート直下にデプロイした場合を想定しています。

/index.html 掲示板のトップページ
/db.php データベースの接続関係のデータのファイル
/input.php メッセージ入力ページ
/list.php メッセージ一覧ページ
/message.php メッセージ詳細ページ
361 ◆SWtzLesEmM
2007/02/27(火) 15:22:07ID:???
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>
371 ◆SWtzLesEmM
2007/02/27(火) 15:24:34ID:???
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");
}

(以下、続く)
381 ◆SWtzLesEmM
2007/02/27(火) 15:25:32ID:???
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;
}
391 ◆SWtzLesEmM
2007/02/27(火) 15:26:17ID:???
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;
}
?>
401 ◆SWtzLesEmM
2007/02/27(火) 15:30:07ID:???
input.phpの内容は以下の通りです。

<?php
/**
* メッセージ入力画面
*/

require_once("db.php");
db_connect();

//
$name = $_POST['name'];
$title = $_POST['title'];
$message = $_POST['message'];
$error_msg = "";

(以下、続く)
411 ◆SWtzLesEmM
2007/02/27(火) 15:30:59ID:???
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 = "名前、タイトル、メッセージをすべて入力してください。";
}
?>
421 ◆SWtzLesEmM
2007/02/27(火) 15:34:29ID:???
>>41
間違えました。

>db.phpの続きです。
ではなくて、
「input.phpの続きです。」
でした。(・∀・)

あと、
>$url = "http://";.$_SERVER['HTTP_HOST']."/test2/list.php";//メッセージ一覧
ではなくて、
$url = "http://";.$_SERVER['HTTP_HOST']."/list.php";//メッセージ一覧
になります。

=ローカルでは、/test2というフォルダを作ってその中にいれていたので。
=本番環境では、ドキュメントルート直下を想定しているので、/test2/は不要

もう一回訂正してアップします。
431 ◆SWtzLesEmM
2007/02/27(火) 15:40:30ID:???
>>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 = "名前、タイトル、メッセージをすべて入力してください。";
}
?>

(以下、続く)
441 ◆SWtzLesEmM
2007/02/27(火) 15:42:00ID:???
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>
451 ◆SWtzLesEmM
2007/02/27(火) 15:44:03ID:???
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());
?>
461 ◆SWtzLesEmM
2007/02/27(火) 15:45:25ID:???
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>
471 ◆SWtzLesEmM
2007/02/27(火) 15:46:10ID:???
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>
481 ◆SWtzLesEmM
2007/02/27(火) 15:47:39ID:???
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);
}
?>
491 ◆SWtzLesEmM
2007/02/27(火) 15:49:23ID:???
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>
501 ◆SWtzLesEmM
2007/02/27(火) 15:50:12ID:???
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>
511 ◆SWtzLesEmM
2007/02/27(火) 15:59:41ID:???
それでは、次行ってみよう!
>>22 (2)次にOOPで同じ掲示板を作ってみる

>>34
PHPコードとHTML表示を一緒にしてありますが、OOPではテンプレートシステムを使って、PHPコードとHTML表示部分を分離して、MVCにしてみたいです。

どういうクラスを作ればいいのか良く分かりません><

(1)コントローラー(+アクション)→input、list、message
(2)モデル→データベース接続処理も1つのクラスにするのでしょうか?
(4)ビュー→テンプレートシステムへの出力
というかんじで3個のクラスが必要でしょうか?
それぞれのクラスに必要なプロパティとメソッドを何にするか?
クラスを考えて、UMLでクラス図を作ってみたいです。
52nobodyさん
2007/02/27(火) 22:54:58ID:???
がんばってるなあ。
おれもがんばろう。
53nobodyさん
2007/02/28(水) 03:12:15ID:???
わかりにくいからWebサイトにまとめてくれ。PHP使いなんだし
541 ◆SWtzLesEmM
2007/02/28(水) 20:49:38ID:???
>>53
まとめサイトを設置しました。
http://kameleon.s241.xrea.com/dokuwiki/doku.php
55nobodyさん
2007/02/28(水) 22:48:34ID:???
最終的にMVCな構成を目標に
少しずつリファクタリングしていけばよいと思う

とりあえずDBアクセスを一箇所にまとめるモデルを作ってみるといいんじゃない
・全件取得
・1件取得
・1件追加
できるMessageクラスとかを作ってそこにDBアクセス(SQL)をまとめれ
56nobodyさん
2007/03/03(土) 13:53:29ID:Ej/v+KpC
期待上げ
57nobodyさん
2007/03/04(日) 04:17:32ID:xhaosu8B
期待
58nobodyさん
2007/03/11(日) 11:30:29ID:???
OOP勉強したいなら、実力不足のやつが書いたガラクタ掲示板スクリプトを
読むより、有名なオープンソースのスクリプトを読めばいいじゃん。
そもそも>>1の意味不明な独善なんかに付き合わなくてもOOPに関する情報
はいくらでも手にはいるし。
59nobodyさん
2007/03/11(日) 23:56:02ID:???
ど素人に肥大したコードを読ませて理解できると思ってる思考回路がカコイイ!
60nobodyさん
2007/03/12(月) 08:27:35ID:cm9vlrfS
>>59
ど素人はみんな、自分みたいな学習意欲も向上心もない人間だと思ってる
思考回路がカコイイ!
61nobodyさん
2007/03/12(月) 09:16:45ID:???
>>60 思考回路がカコイイ!
62nobodyさん
2007/03/12(月) 09:57:59ID:???
>>59-61
全員カコワルイ!! 俺はカコイイ!!
63nobodyさん
2007/03/12(月) 13:37:56ID:???
>>1-62
全員カコイイ!!
俺はカコワルイ!!
64nobodyさん
2007/03/12(月) 14:07:03ID:???
で、結局荒れ放題になり>>1の独善は無事終了したのだった。
ちゃんちゃん。
651 ◆SWtzLesEmM
2007/05/12(土) 03:12:14ID:???
>>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でフォーラムを作ろう!
66nobodyさん
2007/05/12(土) 16:09:18ID:???
中傷されている>>1だが、
普通に>>1のおかげでだいぶいい情報が手に入った。
曖昧だったクラスがなんとか分かりそうだよ。
ありがとー
PHPでわからない人は情報が足りないのかもな。
似てるJAVAで本格的なものを見てみると分かるのかも。

昔、歴史で年表同士のつながりが薄くて分かりづらかったように、
もっと詳しく高校の歴史くらいのをみれば分かりやすい。
67nobodyさん
2007/05/12(土) 23:32:04ID:s118dfiw
なんていうか「こういうときにはこういう設計をします」っていう
具体的な情報がほしいよな
俺は車なんかプログラミングしないっての
68nobodyさん
2007/05/14(月) 00:46:15ID:4QCW9ZwU
最近ちょっとだけ解ってきた。

なぜOOPなのかと言えば
再利用とメンテナンス、拡張がやりやすい(やりやすく作ることが出来る)ということがすごくて、
そのためにカプセル化とポリモーフィズムがあって
ポリモーフィズムを実現(保証)するために継承や、インターフェイスや抽象クラスがあるって感じなのかな?

PHPによるデザインパターンは読んでみても良いと思う。
あと、ゼンドフレームワーク勉強用にZFで動くブログソフトみたいのあるから、それの仕組みと、ZFのソース(全部はきついけど関係あるところだけ)
を見てみると、結構勉強になると思う。
http://www.itmedia.co.jp/enterprise/articles/0702/28/news028.html
http://www.itmedia.co.jp/enterprise/articles/0703/05/news013.html
http://www.itmedia.co.jp/enterprise/articles/0703/08/news018.html
記事がちょっと古いから最新バージョンと微妙に違うけど。

まあ、このフレームワークが良いか悪いかは別にして(まだベータだし)
OOPバリバリなので、勉強になること間違いなし!
69nobodyさん
2007/05/15(火) 15:55:34ID:???
しかし PHP関連の本でOOPをわかりやすく書いてあるのが



「ない!」 お勧め教えて
70nobodyさん
2007/05/15(火) 16:01:33ID:???
本なんか読むよりPEARやフレームワークのソース読んで
勉強しながら自分なりに書いていけ、金かからないしだしそれが一番の近道
気が付いたらOOPなんて空気のように有って当たり前になるもんだから
71nobodyさん
2007/05/15(火) 16:06:06ID:???
わかりにくいの例として

スコープ演算子(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の章になると意味不明
72nobodyさん
2007/05/15(火) 16:08:18ID:???
書きながら次第にむかつき度が増加して誤字だらけになった(怒

>>70
それ疲れる
73nobodyさん
2007/05/15(火) 17:01:49ID:???
>>69
独習PHPのクラスらへんの説明は中々分かりやすいよ。
作者があまりいいとはいえんが、ファーストステップにはいい感じ。
74nobodyさん
2007/05/22(火) 15:14:54ID:???
同じ事を色々な言葉で表現するから迷うずら
PHPの本読むよりJAVAの本読んだほうが理解できる罠。
75nobodyさん
2007/05/28(月) 14:46:00ID:???
自分が作るだけなら手続き型でいいけど
人の作ったライブラリ使いたいから
最低限、何が書いてあって何をしているのか読めるようになりたい
76nobodyさん
2007/05/29(火) 05:34:16ID:???
答えが出てるじゃないか。その使いたいライブラリのコードを読め
77nobodyさん
2007/06/05(火) 12:23:56ID:/w569Zaf
OOPS
78nobodyさん
2007/06/05(火) 19:15:58ID:???
XOOPS
79nobodyさん
2007/06/11(月) 22:06:39ID:2dWIuVC4
>>65に誰もつっこまないのかよ!!

DBアクセスの為のクラス書くのかw
おそらくPHPインストール時に君のHDDの中にすでに入ってる訳だが…
しかもあらゆるDBに同じ書式でアクセス出来るやつが…
80nobodyさん
2007/06/11(月) 23:45:37ID:???
>>79
なんてやつ?
81nobodyさん
2007/06/12(火) 00:15:06ID:???
PEARのソースは読まない方が身のため
82nobodyさん
2007/06/12(火) 06:55:41ID:e4tfCBN5
79は勘違いしてるが、彼がいいたいのはPearのDBクラスのことだろう
83nobodyさん
2007/06/12(火) 09:31:07ID:???
82が勘違いだろ。
単にPDOだろ
841 ◆SWtzLesEmM
2007/06/12(火) 10:24:12ID:???
>>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 では動作しません。
85nobodyさん
2007/06/12(火) 10:56:05ID:???
mysqliとどっちがいい?
86nobodyさん
2007/06/12(火) 17:53:32ID:???
ふとおもったんだが、>>1はできるんじゃないのか。
87nobodyさん
2007/06/17(日) 01:20:06ID:???
被害者増やさないように書いておく。
「PHPデザインパターン入門」は買うな。

最近買った中で最低レベルの悪書。

どっかの英語ページを機械翻訳したようなトンチンカンな用語説明にまじって
何故かApacheとPHPのインストール方法だけが丁寧な日本語で書かれている。
あとはデザインパターン図が羅列してあるだけ。解説ほぼ無し。
3流大学生のコピペ論文を彷彿とさせる。
こんなの真剣に呼んでも絶対わかるようにはならない。

OOP用語の説明は何故かちゃんとしてないのに
php.iniにページさかれてるけど
網羅して無くて中途半端でページ稼ぎとしか思えない。

中身薄くて有名なヤマダヨウカン本の方がマシに感じるレベル。
88nobodyさん
2007/06/17(日) 01:28:20ID:???
なんか良く読むと、この本は解説の日本語が
オブジェクト指向で書かれてる気がした。

多分最初にパターン名を記載した時点で、作者の頭の中では
記載されてるページを呼び出してるんだろうと思えてきた。

解説するための日本語はプロシージャ指向で書いてくれと
小一時間問い詰めたい。

この本理解するには色んな本を買って、全部理解した後じゃないと
読めない。意味ねえじゃん。
89nobodyさん
2007/06/17(日) 01:54:28ID:???
軽いフレームワークいじって使うのが一番いいオブジェクト指向の勉強だよ
90nobodyさん
2007/06/17(日) 14:22:50ID:???
ウェブアプリにオブジェクト指向なんていらないよ。どうせ文字列を加工してデータベースのテーブルのカラムに並べるだけなんだから。
91nobodyさん
2007/06/17(日) 18:51:52ID:???
じゃどういうときに必須なんよ
92nobodyさん
2007/06/24(日) 17:09:42ID:???
オブジェクト指向と言う言葉にまどわされず、
クラスの勉強をすればいいんだよ。 

単に、呼び出してるだけだから。 
93nobodyさん
2007/06/24(日) 19:32:38ID:???
PEARをサンプルみながら見よう見まねでインスタンス作って
なんだかんだで実際動いてるんだけど何してるかイマイチ理解出来てないんだよね
functionの中でインスタンス作るとその外側ではやっぱアクセスできないのかな
PEARDBのインスタンスがあっちゃこっちゃに散らばっちゃって困る
94nobodyさん
2007/06/25(月) 12:32:57ID:???
>>93
プロパティに入れれ
951 ◆SWtzLesEmM
2007/07/06(金) 14:33:24ID:???
>>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/
96nobodyさん
2007/07/08(日) 18:20:46ID:XFKJF1H9
最近このスレが怖くて見れん俺ガイル
なんでそんな成長早いんだよ・・・おかしいだろ・・・orz
97テレビできたよー
2007/07/10(火) 15:53:51ID: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 />";
  }
 }
98テレビできたよー
2007/07/10(火) 15:54:22ID: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();
99nobodyさん
2007/07/11(水) 10:41:20ID:???
例外投げるようにすれば?
1001 ◆SWtzLesEmM
2007/07/11(水) 12:59:29ID:???
例外処理
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{ }で処理するという流れになる。

↑とのことですが、汎用性のある関数やメソッドにしたい場合、エラーが発生したときの処理を書く場所は、関数やメソッドを使う方(呼び出す側)にすることもあるでしょうか?
=戻り値をチェックするというのは、古いやり方なんでしょうか?
1011 ◆SWtzLesEmM
2007/07/11(水) 13:07:20ID:???
>>96
PHPプロのメルマガ読んで、知ったかぶりなだけですw
お互いがんばりましょう☆(・∀・)
102nobodyさん
2007/07/11(水) 14:16:38ID:???
いやさ,まず公式マニュアルを読む癖を付けようぜ
103nobodyさん
2007/07/11(水) 14:44:53ID:???
MVCじゃないとOOPなんて意味ないですかr
104nobodyさん
2007/07/11(水) 17:30:14ID:???
( д)      ...。。
105nobodyさん
2007/07/12(木) 02:57:31ID:???
MVCもデザインパターンの一種じゃなかったっけ?
106nobodyさん
2007/07/12(木) 08:06:18ID:???
>>100
なんかphpspotのその文はおかしいな。
エラー処理は例外を使おうがそうじゃなかろうが変わらない。
呼ばれた側はどういうエラーがあったか返す責任があるし、
呼んだ側は返ってきたエラーをチェックする責任がある。
エラーが起きた時の挙動を自分で決めれるならその場で処理すれば良いし、
そこではまだ決められないならさらに上位へreturnなりthrowすれば良い。

107nobodyさん
2007/07/14(土) 15:28:38ID:w3CTKtks
OOPってのはアプリケーションをモノに見立てて、それを構成している部品をクラスとして定義する、ってとこまではなんとなく理解した。

例外処理?なにそれうまいの?
108nobodyさん
2007/07/14(土) 18:34:23ID:???
ダンボールの味がするお
109nobodyさん
2007/07/14(土) 19:32:25ID:???
おまいらオブジェクト指向に騙されてるよ。ただのデータ型に過ぎない。
110nobodyさん
2007/07/14(土) 19:46:31ID:w3CTKtks
今、習作としてプロフィールスクリプト(っていうのも大袈裟なぐらいショボイやつ)を書いてるんだけど、どうにも悩む。悩む。
とりあえず、
-質問と答え(Entry)
--セッタ(SetQuestion,SetAnswer)
--ゲッタ(GetQuestion,GetAnswer)
-それらのEntryを編集したり、操作したりする(ManageEntry)
--POSTされたデータにEntryの値を変更する(EditEntry)
-プロフィール自体(Profiel)
--質問と答えを出力(ViewProfiel)
こんなクラスたちを作ったんだけどなんかおかしい気がしてならない。
とくにManageEntryのとことか。
ManageEntryでEntryオブジェクトの配列Entriesを作っといてそれをそのクラス内で操作とか?は?え?
OOPムズイ、ナキタイ


スレ汚しスマソ
111nobodyさん
2007/07/14(土) 21:29:40ID:???
どんな物を作ってるのかよく分からないけど
ぱっと見で確実に言える事は、個別のクラスが多すぎ。
半分くらい継承とメソッドの追加で済みそう。
今のままだと拡張もやり難そう。

プロフィールが"profiel"なのはつっこんだ方が良いのかな。

CakeとかSynfonyみたいな、ライブラリじゃないフレームワークを
使い込んでソース読んだら、どう設計したらよいか一気に分かるよ。
112nobodyさん
2007/07/14(土) 22:22:33ID:w3CTKtks
継承とメソッドの追加ってどうやるんですか><;
正直どうやったらいいのか全くわからん。
プロフィール?え?あ?あはあは。
113nobodyさん
2007/07/15(日) 00:13:47ID:???
きめぇ
114nobodyさん
2007/07/15(日) 00:19:07ID:???
Synfony はつっこんだ方(ry
1151 ◆SWtzLesEmM
2007/07/26(木) 10:21:49ID:???
>>106
>呼ばれた側はどういうエラーがあったか返す責任があるし、
>呼んだ側は返ってきたエラーをチェックする責任がある。

なるほど〜(・∀・)
呼ぶ側と呼ばれた側のそれぞれでエラーの対処があれば、手堅いですね!
大変参考になりました。
1161 ◆SWtzLesEmM
2007/07/26(木) 10:29:09ID:???
掲示板の続きを作りました。
DBにアクセスする機能をクラスにしてみました。
http://kameleon.s241.xrea.com/dokuwiki/doku.php?id=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B

動作サンプル
http://kameleon.s241.xrea.com/oop/bbs2/index.php

なんか、>>55さんのアドバイスの形になってませんが…orz
とりあえず、DBアクセスをクラスの形にできたので一歩前進!!!\(^o^)/
1171 ◆SWtzLesEmM
2007/07/26(木) 10:50:37ID:???
>>110
おー、ガンバレ〜〜〜☆

>>111
(1) Entryクラス
文章を「書き込む」メソッド、「読む」メソッド、「書き換える(編集)」メソッド、「削除する」メソッドが用意されている。

(2) Entryクラスを継承して、質問用のクラスを用意
=質問のデータだけを操作できる

(3) Entryクラスを継承して、答え用のクラスを用意
=答えのデータだけを操作できる

というかんじになるんでしょうか?
どういうまとまりでクラスにすればいいのか、そこら辺がなんかよく分からないんですよねー(ノ∀`)
118nobodyさん
2007/07/26(木) 10:57:58ID:???
どうしてPDOをry
119nobodyさん
2007/07/27(金) 00:44:20ID:???
おんにゃにょこの
おっぱい
ぷぴにぷにだにょ〜
120nobodyさん
2007/07/28(土) 17:35:02ID:???
夏だな
121nobodyさん
2007/07/30(月) 03:51:10ID:???
function &foo {
echo "ほげ"


こういうやつ、「リファレンスを返す」っていうんですか?
これはどういう処理をしているんでしょうか?
どこかで定義されているfoo()という関数に何かしているんですか?
122nobodyさん
2007/07/31(火) 07:40:25ID:???
高機能な参照関数だな
123nobodyさん
2007/08/01(水) 06:30:28ID:abLVM2kM
>>87
買ってしまっていたよ。Iteratorまで読んだけど、
分かったような分からないような気分。

説明が少ない&下手なのは分かった。
124nobodyさん
2007/08/01(水) 22:18:22ID:???
分からない人に分かるように書いてないという意味では同意。
書いてあることを全て理解していこうとするとこんがらがってくるしね。
まぁいい頭の体操になったけど。
あんなサンプルのためのサンプルではなく、具体的な使い方と利点が書いてあるとOOP素人にも理解しやすかったかもね。
125522
2007/08/26(日) 13:53:57ID:QzPwO1Nh
>>117
なんかCakePHP使ってみたんだけど質問と答えを操作するクラス作って云々みたいになって結局>>110と同じような感じになっちゃいましたとさ・・・
「モノ」に書く機能とか読む機能持たせていーの?おしえてえろいひと><
126nobodyさん
2007/08/26(日) 14:28:30ID:???
お前が「モノ」をどう捉えるか次第だよ
127nobodyさん
2007/08/28(火) 02:25:00ID:???
結局どうやってデータを保持したら、人間にとって分かりやすいか、コンピュータにとってやさしいかってことだろ。
128nobodyさん
2007/10/03(水) 02:51:35ID:???
オブジェクト指向は木構造を再現しようとしているだけ。
インスタンスだのオブジェクトだのは枝、茎、葉、花、果実を作るというだけ。
mainでは結果(果実)だけをとりたいから枝やら茎やらは見えなくしとけってことだろ?
129nobodyさん
2007/10/03(水) 16:27:59ID:???
>>128
まあそんな感じだ
130nobodyさん
2007/10/03(水) 23:45:33ID:???
まぁ、ファイルの管理方法も木構造だし、インターネットなんていっても網状でなく、
サーバーを経由した木構造になってることから演算機が理解しやすいデータ構造は木構造である。
こういってしまっても過言ではないと思う。


例えば、手続き型は東京の小さなバイク便が地方への配達を頼まれても東京発で請け負うみたいなもの。
それに対して、OODはヤ○ト運輸が東京で頼まれた配達を一旦、地方の配送センターに送るようなもの。
配達する対象が少なければ、バイク便に頼んだ方が早いかもしれないけど、数が多くなるとヤ○ト運輸。
131nobodyさん
2007/10/05(金) 01:16:19ID:???
うん、ここ数日でオブジェクト思考勉強してて分かったこと。
ちなみに128==130==漏れです。

・オブジェクト指向は木構造
・目的は種の存続、繁栄
・ここでのフローは一つずつだが、間にどれだけの枝が挟まるかは設計次第

クラス設計
 種(プリプロセッサ)から芽が出る(この時点では手続き型でも、OODでもない)
 根クラス…main関数、もしくはmainクラスの設計、遺伝子(設計の違いで木になるかどうかが決定)
 幹クラス…根から養分を吸い上げる(大まかな工程の分類)

オブジェクト生成
 枝クラス…効率的に日光を取得できるよう枝を伸ばす(コンストラクタ)
 葉クラス…光合成を行い、自己生産を行う(メソッド)
 葉緑素クラス…目立たない頑張り屋さん(ライブラリ)
 花クラス…実となるか枯れ落ちるか(オブジェクト)

実行結果
 果実クラス…土に還り、新たな種となりました(プロジェクト成功)
132nobodyさん
2007/10/05(金) 20:07:34ID:???
なんかすぐ動いて実用的で簡単なサンプルください
133nobodyさん
2007/10/05(金) 20:35:14ID:???
package hoge;


my $class=shift;

$ENV{'TZ'} = "JST-9";
my ($sec,$min,$hour,$mday,$mon,$year) = gmtime(time + 9*60*60);
my $obj={'sec'->$sec, 'min'->$min, 'hour'->$hour, 'mday'->$mday, 'mon'->$mon, 'year'->$year};

return bless $obj, $class;

1;



適当に書いてみた。あとは時間をゴニョゴニョするだけ、普通に作ったほうがメリット大きい気もするがキニシナイ!!
ヨウカソマソ参上===[・∀・]ノシ
134131
2007/10/05(金) 23:40:29ID:???
実際に設計して、作ってみるとオブジェクト指向の本質は"同じことは出来るだけ"しない。
この論理で動いてるような気がしてきた。何でもかんでもオブジェクトにするのではなく、
運搬の頻度が激しいデータ、プログラム中で何度も使用するデータをオブジェクトにする。
そんな感じで合ってるのかな?あと、変数の受け渡しは原則、参照で行うみたいな。
135131
2007/10/06(土) 13:37:33ID:???
何となく掴めてきた。もっかい木構造で表してみる。

根: プリプロセッサ、送信データ(実行役)
幹: main(効率よく栄養=処理を振り分ける)

[クラス]・・・大規模にもなるとこれが幾重にもネストされる。
  枝: コンストラクタ(葉に栄養=処理を割り振る、葉で生成された養分=オブジェクトを幹に伝える)
  葉: メソッド(オブジェクト=養分を生成する)
  花: オブジェクト(実行結果=果実の手前)

果実: 実行結果(主の繁栄=実行結果が真)

ちなみに実行結果が偽となるのは幹から花に至るまででエラーが起こった場合。


漏れルール
mainは基本的にクラスに指示を与える以外しない。

コンストラクタでオブジェクトの用意を行う。
メンバメソッドはオブジェクトの加工を行う。
コンストラクタからオブジェクトを返す。

mainは次に必要なオブジェクトを作るクラスへ処理を回す。
136nobodyさん
2007/10/07(日) 12:52:54ID:???
日曜日1GET!
始めまして
まだPHP3ヶ月目ですが早くもオブジェクト指向で挫折><
ちなみに
・「基礎PHP」
・「PHP5であなたもウェブアプリが作れる!」
・「速効!図解プログラミングPHP + MySQL」
を参考書にしています。

分かりやすかったのは基礎PHPです。
掲示版からスケジュール管理に移るところで
Smarty関連を追加するため承継とか出てきてなるほどと思いました。

ただソース理解しても自分では何もできないんですけどねw
137nobodyさん
2007/10/07(日) 19:12:30ID:???
掲示板の改良はどうします?
138nobodyさん
2007/10/07(日) 21:04:45ID:???
丸投げします
139nobodyさん
2007/10/07(日) 21:09:36ID:???
OOPで作ったやつの
ソースとかうpったら
なんか色々言ってもらえるんかな?
このスレでは
140nobodyさん
2007/10/07(日) 21:46:16ID:???
>>139
自分も変なソースですけど味見してもらえます?
恥ずかしいです><
141nobodyさん
2007/10/08(月) 09:30:37ID:???
>>133
これをどうやって使えばいいんですか
142nobodyさん
2007/10/08(月) 19:27:30ID:???
なかなか面白いブログを発見しました。
ぜひ皆さんに見てもらって意見聞きたいな^^

http://blogs.itmedia.co.jp/tamaki/2006/06/post_57ab.html
143nobodyさん
2007/10/09(火) 22:34:59ID:???
MVCのコントローラについてどこまでクラスにするか迷っています・・・
144nobodyさん
2007/10/10(水) 16:06:50ID:???
ハァ?
145nobodyさん
2007/10/12(金) 03:46:51ID:???
意味わかんね
どこまでクラス?
146nobodyさん
2007/11/12(月) 13:32:18ID:???
まずはモデルでしょ
147nobodyさん
2007/12/13(木) 08:37:25ID:Q/a8rTy0
SPLって使ってる人実在するの?

http://jp2.php.net/manual/ja/ref.spl.php
148nobodyさん
2007/12/14(金) 02:09:52ID:???
例外はよく使う
149nobodyさん
2007/12/19(水) 01:29:29ID:???
>>147
読み込んでも八割がた無駄なので使わない
150nobodyさん
2007/12/23(日) 12:51:26ID:???
かしゆか誕生日おめでとう!
http://www.tkma.co.jp/tjc/j_pop/perfume/profile.html
151nobodyさん
2007/12/24(月) 10:55:41ID:???
>>149
つりですか?
152nobodyさん
2007/12/29(土) 00:05:37ID:4ZpocZiG
MVCのCってどうやって書けばいいのかわからんぜ。
153nobodyさん
2007/12/29(土) 02:00:56ID:???
その概念中でコントローラーが理解出来ないってやつ初めてみた

とりあえずView上で必要な操作を徹底的にControllerに切り離すが良い。
そしてModelからデータを引き出して必要があれば書き込み更新してやりなさい。
154nobodyさん
2007/12/31(月) 19:44:35ID:???
ユーザークラスで新規登録処理をして、そのときにユーザークラスの中で
プロフィールクラスのオブジェクトを作ってプロフィールの登録もする

これってしいて言えば何パターン?
155nobodyさん
2007/12/31(月) 19:47:57ID:???
ワンパターン
156nobodyさん
2008/01/01(火) 00:16:32ID:???
パターンというかコンポジションでそ
157nobodyさん
2008/01/29(火) 11:18:04ID:???
模範解答は無いけれど、以下の相互変換を行うクラス(ChStr)をみんなで
作ってみるという案はどうかな?
そして、これが出来たら、ログファイルに保存などの機能をつけ、
wikiみたいに編集が出来る機能を追加していくという感じに。

<編集>
-------------------------------------------------------------
= 2ch
'''2ch'''とは、総合掲示板のことである。
link:[http://www.2ch.net]
-------------------------------------------------------------

<出力>
-------------------------------------------------------------
<b><font size="+1">2ch</font></b><br>
<b>2ch</b>とは、総合掲示板のことである。<br>
link:<a href="http://www.2ch.net">http://www.2ch.net<;/a><br>
-------------------------------------------------------------
1581 ◆SWtzLesEmM
2008/01/29(火) 11:29:32ID:???
>>157
OOPの勉強というよりも、どちらかというと正規表現の勉強になるでしょうか?
wikiのパーサーつくるなら、既存のwikiスクリプトや、PEARのText_Wikiが参考になるかもしれませんね。

http://www.phppro.jp/news/172
PEAR::Text_Wiki 1.2.0RC1 リリース 2006年10月11日
http://labs.cybozu.co.jp/blog/tsuruoka/anubis/blog_show/18
Text_PukiWikiリリース
159nobodyさん
2008/01/29(火) 11:43:55ID:???
>>158
C++のOOPの勉強として、文字列を簡単に扱うことが出来るクラスを
自作してみるという演習があったので、それをPHPでもやってみようかなと
思ったものです。
Cでは、文字列を結合したり、splitしたりするのが結構大変なので、
この演習が役に立ったなと思っていたのです。
PHPの場合は、関数を使えばそれで終わってしまうので、もう少し
ひねりを入れたものを考えて見ました。

正規表現を練習するというよりも、正規表現とhtmlの相互変換をする
クラスがあると、プログラムをする際、便利だなという事が実感
出来るのでは?という意味合いです。

(例)正規表現を格納し、html出力する過程。
$text に textarea タグの文字列を格納する。
$str = new ChStr($text);
echo "<html><body>";
$str->Write_html();
echo "</body></html>";

ほら、このクラスがあるとレイアウトを変えたりが、やり易い上に
再利用性が高いでしょ?みたいな。
1601 ◆SWtzLesEmM
2008/01/29(火) 11:47:24ID:???
OOPの参考になる解説がありました。

PHPのclass、オブジェクト指向プログラミングに関する質問です。
http://q.hatena.ne.jp/1187962431

2番の回答者の解説が分かりやすいと思いました。
6番の回答者のサンプルコードも参考になりましたが、これは「インターフェース」の利用方法ではありませんね。><

インターフェイス
http://www.phppro.jp/phpmanual/php/language.oop5.interfaces.html
あるクラスが実装する必要があるメソッドの種類を、これらのメソッドの実体を定義することなく、指定するコードを作成できるようになります。
インターフェイスはキーワードinterfaceにより定義され、通常のクラスと同様に定義することができますが、メソッドの実装は全く定義されません。
1611 ◆SWtzLesEmM
2008/01/29(火) 12:00:16ID:???
>>159
なるほど!(・∀・)
文字列を扱う処理は、いろんなところで出番がありそうですね!
wikiの文法(表記方法)が使える掲示板とか作れそう^^
162nobodyさん
2008/01/29(火) 12:04:23ID:???
ChStr クラス の設計はこんな感じかな。

メンバ
private $m_str; // 正規表現文字列を格納する。

コンストラクタ
ChStr($str) // 正規表現の文字列を受け取る。

private メソッド
ch_to_html() // 正規表現をhtmlに変換する。

public メソッド
Write_html() // 格納している文字をhtmlで出力する。
Write_text() // 格納している文字を正規表現で出力する。

---------------------------------------------------
本当は、ログファイルへの保存や読み取りなどを機能として
考え、そのあたりまで含めたクラスの設計をした方が
いいんだろうけれど、まずは簡潔にする方向でいきます。
で、後々拡張の方向で。
1631 ◆SWtzLesEmM
2008/01/29(火) 12:04:44ID:???
PHPのインターフェースは、Javaとかのインターフェースとはちょっと違っているみたいですねー。><
(…使ったことないので実感がありませんが^^)

PHPでは実装済みのinterfaceを多重に実装できない
http://blog.xole.net/article.php?id=589
http://blog.xole.net/article.php?id=597
1641 ◆SWtzLesEmM
2008/01/29(火) 12:25:09ID:???
>>162
こんなかんじのプログラムと似ているかもしれませんねー。

60行で作るPHP用テンプレートエンジン
http://anond.hatelabo.jp/20071030034313
>テンプレートの中身を置換する
>function convert_string($s)

↑置き換えるパターンに応じて、別々のメソッドを用意したら便利でしょうか?
= 文字サイズ変更、''' 強調、link: リンクとかの記法の置換を担当するprivateメソッド
1651 ◆SWtzLesEmM
2008/01/29(火) 12:34:03ID:???
OOPの参考になる解説がありました。

関数、オブジェクト、クロージャ
http://d.hatena.ne.jp/brazil/20060131/1138692196
>オブジェクトは、データに処理がくっついたものです。
>array.map()のように、後に後に処理を追加していく書き方は、順にコードを追えるため読みやすく、また書きやすいです。

クロージャっていう仕組みは、PHPにはないですね?><
大は小を兼ねる…クロージャの代わりにオブジェクトが使えればとりあえずOKかな?(・∀・)
166nobodyさん
2008/01/29(火) 13:15:31ID:???
>>161
>wikiの文法(表記方法)が使える掲示板とか作れそう^^

PEARのText_Wiki使えばよくね?
167nobodyさん
2008/01/29(火) 13:18:38ID:???
>>164
> 置き換えるパターンに応じて、別々のメソッドを用意したら便利でしょうか?
本来ならば、そうなるでしょうね。それらはすべてprivateで作っておいて、
外部には、一つのインターフェースのみ(この例の場合はWrite_html()がそれに該当)
公開となるでしょう。
記号ごとに別々にメソッドを定義しておけば、記号とhtmlの関係が変わる時は、
どのメソッドを触ればよいかが分かるし、それを変更したことで、
他のメソッドには影響は無かったりします。
(これが構造化プログラムの場合は、目的のソースと目的ではないソースを
見極めるところから始まります。)

-------------------------------------------------------------------------
この ChStr に汎用性を持たせる場合は、Write_html()というよりも、
Get_html()とし、html文字列を return する事になるでしょう。
そうすると、別なプログラムで、「出力結果をファイルに保存する」という
使い方も出来ます。しかし、今回は初回なので、Write_html()とし、
メソッド内部で echo 使うことにします。
168nobodyさん
2008/01/29(火) 13:22:48ID:???
>>166
学ぶために具体的に物を作るのと、実用性を考えて物を作るのは
別だと思う。なので、今回はこれでいいと考えている。
現に、初心者向けの書籍に載っているソースの実用性はゼロだ。
169nobodyさん
2008/01/29(火) 13:59:05ID:???
とりあえず、全体構成の確認のために書いてみた。
ch_to_html()は、追記の必要性がある。
[chstr.php]
<?php
class ChStr {
// メンバ
var $m_str_reg; // 正規表現文字列を格納する。
var $m_str_html; // html文字列を格納する。
// コンストラクタ
// 正規表現の文字列を受け取る。
function ChStr($regstr) {
$this->m_str_reg = $regstr;
$this->ch_to_html();
}
// private メソッド
// 正規表現をhtmlに変換する。
function ch_to_html() {
// 改行を<BR>に変更する。
// nl2br($this->m_str_reg) 使った方がいいかも
$this->m_str_html = ereg_replace("\n","<BR>",$this->m_str_reg);
}
// public メソッド
// 格納している文字をhtmlで出力する。
function Write_html() {
echo $this->m_str_html;
}
// 格納している文字を正規表現で出力する。
function Write_text() {
echo $this->m_str_reg;
}
}
?>
170nobodyさん
2008/01/29(火) 14:03:31ID:???
[index.html] 最初に開くファイル。
<html><body>
<form method="POST" action="./text.php"><textarea name="reg_text" cols=40 rows=4>
あああああ
いいいいい
ううううう
</textarea><br>
<input type=submit value=" 送 信 "></form>
</body></html>


[text.php]
<html><body>
<?php
include("./chstr.php");
$in_text = $_POST["reg_text"];
$chst = new ChStr($in_text);
$chst->Write_html();
?>
</body></html>
1711 ◆SWtzLesEmM
2008/01/29(火) 14:10:04ID:???
>>166
確かにそうなんですが、「勉強のため」という目的もあるので、自分で作ってみるというのもありでしょうか?^^
でも、答えが分かっている問題を解くのは楽ですね。>Text_wiki

車輪の再発明 - Wikipedia
http://ja.wikipedia.org/wiki/%E8%BB%8A%E8%BC%AA%E3%81%AE%E5%86%8D%E7%99%BA%E6%98%8E
車輪の再発明とは、「広く受け入れられ確立した技術や解決法を無視して、同様のものを再び一から作ってしまう事」を意味する
ある技術の意味を理解させるために、意図的に車輪の再発明を行わせる場合がある
1721 ◆SWtzLesEmM
2008/01/29(火) 14:19:35ID:???
wikiとか文字列を処理する仕組みは、「パーサー」とか「構文解析」っていうみたいですね(´∀`)

構文解析 - Wikipedia
http://ja.wikipedia.org/wiki/%E6%A7%8B%E6%96%87%E8%A7%A3%E6%9E%90%E5%99%A8

今までにいろんな仕組みが考えられてきたみたい。
…本格的にやると奥が深そうだけど、一度仕組みを勉強しておいたら、いろいろ使えそうな予感!(・∀・)

↓wikiの仕組みを自分で作っている方は結構いるみたいですねー。

PHP用の汎用WikiParser作り中
http://tdiary.ishinao.net/20050323.html
RandomNote/PHPについて
http://tbox.jpn.org/wiki/rnh/index.php?AboutPage.txt
173nobodyさん
2008/01/29(火) 14:21:38ID:???
今後の課題と予定
・ch_to_html() の中身を書く。
・[text.php] の機能を充実(テキストファイルに保存するなど)させ、wikiを作る。
・上記とは別に、 ChStr クラスを使い、BBSを作る。
・ChStr クラスに clear()、SetStr() 等のメソッドをつけ加え、汎用性を持たせる。
1741 ◆SWtzLesEmM
2008/01/29(火) 14:38:20ID:???
http://tbox.jpn.org/wiki/rnh/index.php?AboutPage.txt
RandomNoteのMain.phpは参考になるでしょうか?

preg_match
preg_replace
array_push
array_pop
などの関数を使って、文字列の切り貼りをしてるんですねー。
175nobodyさん
2008/01/29(火) 14:39:05ID:???
OOPってより単にクラスの使い方書いてるように見えるのはまあいいとして
メソッドの中でstringをreturnせずにecho使うのは>>167で書いてるように汎用性って面もあるけど
処理と表示の分離って意味合いもあるからちゃんとstringで返したほうがいいよ
176nobodyさん
2008/01/29(火) 15:39:09ID:???
>>175
> OOPってより単にクラスの使い方書いてるように見えるのはまあいいとして
OOPについて説明するとなると、具体的なソースコードとは離れた方が
良くなったりしますからね。
(クラスの使い方書いているように見えるとしても、)PHPでclassを
組む場合のメリットみたいな位置づけで学んでいこうと思っています。

> 処理と表示の分離って意味合いもあるからちゃんとstringで返したほうがいいよ
確かに汎用性以外にそういう目的もありますね。
次のものでstringで返すように書き換えます。
177nobodyさん
2008/01/29(火) 18:16:08ID:???
htmlのformのコードもクラス化するのが本当の流れんだろうけれどな。
いきなりそれをやると分かりにくくなるかな・・・
178◆lKs5QMUHoA
2008/01/29(火) 19:20:19ID:???
ChStrクラスのサンプルソースを投稿してた者ですが、
今までnobodyさんで書いてたけど、分かりにくくなるかと思ったので
酉入れるようにしてみます。

>>5に書いてあるように、オブジェクト指向は「変数を保持できる事」が
メリットだと思うのですが、これがWebアプリだとどうも実感が無かったりします。
リッチクライアントだと、マウスのクリックに合わせて、メソッドが呼び出され、
そのアプリケーションが終了するまでの間、各種オブジェクトの中の変数に
状態が保持されるという構造なので、そのメリットが感じられるのですが、
Webアプリでは、POSTする度にオブジェクトの変数の状態はリセット
されてしまうので、クラスを書いたとしても、結局はグローバル変数から
各種オブジェクトの変数に代入するみたいなコードを書かなくては
ならなくなってしまうので、このメリットがあるのかと思ってしまうのです。

これは、勉強不足だからなのでしょうか。。。
179nobodyさん
2008/01/29(火) 22:51:04ID:???
>>160
他の人の話のほうがよっぽど核心を突いてるよ
180nobodyさん
2008/01/29(火) 23:05:47ID:???
>>160のはてなのリンクの4番目の話、2chの別の板でも
読んだことがあるけれど、この話本当なの?
具体的に何処でどういう商売をしての話なんだろうか。
アプリケーションを売る話?それとも開発環境用のソフトを売る話?
181nobodyさん
2008/01/30(水) 21:59:22ID:???
ピュアな意味でオブジェクトを操作したいなら
ボタンのクリックに関する全ての画面遷移に関してserializeとunserializeを管理する必要があるだろ

<?php

require_once("hiroyuki.class.php");

$hiroyuki = unserialize($_SESSION["hiroyuki"]
182nobodyさん
2008/01/31(木) 07:20:40ID:NaJ3keB3
>>178
ユーティリティクラスの再実装みたいな事を熱心にやっても
あまり意味が無いと思いますよ。

まさにあなたの言う「いちいち書くのがめんどくさい」のを回避する為に
OOPがあるんだと思います・・・

OOPの勉強なら、簡単なWEBフレームワークを自作するのが一番良いよ。
知識の無い段階でいきなりPHPでOOPって無理だと思いますよ。

背伸びせず、まずjavaやC#を学習する方が近道かもしれないよ。
183nobodyさん
2008/01/31(木) 08:15:31ID:???
.NET 以降の VisualBasic ってどうなの?
184nobodyさん
2008/01/31(木) 17:31:43ID:???
MVCモデルにそって、ユーザの入力データと、CSVファイルのデータを
読み込んで表示させるというものを作ってみました。

ファイル:全部で5つ。index.phpを実行する。
cfcontrol.php
cfview.php
index.php
cfmodel.php
csv.txt

[csv]
aaa,bbb,ccc

[index.php]
<?php
include("./cfcontrol.php");
$form_str = $_POST["form"];
$in_str = $_POST["key"];
$form = new CFControl($form_str, $in_str);
?>
185nobodyさん
2008/01/31(木) 17:32:35ID:???
[cfcontrol.php]
<?php
include("./cfview.php");
include("./cfmodel.php");
class CFControl{
function CFControl($form_str, $in_str){
if( ($form_str == "")or($form_str == "in") ){
$form = new CFView("index.php","in","");
$form->Write_HTML();
}elseif($form_str == "out"){
$da = new CFModel();
$dat = $da->ReadDat($in_str);
$form = new CFView("index.php","out", $dat);
$form->Write_HTML();
}
}
}
?>
186nobodyさん
2008/01/31(木) 17:33:57ID:???
[cfmodel.php]
<?php
class CFModel{
var $m_csv_file;
// コンストラクタ
function CFModel(){
// 読み込むCSVファイルを指定
$this->m_csv_file = "csv.txt";
}
// データを取り出す。
function ReadDat($str){
$INFILE = fopen($this->m_csv_file,"r");
$line = fgets($INFILE, 1024);
fclose($INFILE);
$line = $line . ", " . $str;
return $line;
}
}
?>
187nobodyさん
2008/01/31(木) 17:37:50ID:???
[cfview.php](1/2)
<?php
class CFView{
var $m_file; // POSTするファイル名
var $m_type; // 表示するフォームの種類。in か out
var $m_line; // 表示するデータ
// コンストラクタ
function CFView($file, $type, $line){
$this->m_file = $file;
$this->m_type = $type;
$this->m_line = $line;
}
// private
function in_html(){
echo "<html><body>";
echo '<form method="POST" action="' . $this->m_file . '">';
echo '<input type="hidden" name="form" value="out">';
echo '<input type="text" name="key"><input type="submit" value="送信">';
echo "</form></body></html>";
}
188nobodyさん
2008/01/31(木) 17:39:35ID:???
[cfview.php](2/2)
// private
function out_html(){
echo "<html><body>";
echo '<form method="POST" action="' . $this->m_file . '">';
echo '<input type="hidden" name="form" value="in">';
echo "$this->m_line<br>";
echo '<input type="submit" value="戻る"></form></body></html>';
}
// public
function Write_HTML(){
if($this->m_type == "in"){
$this->in_html();
}elseif($this->m_type == "out"){
$this->out_html();
}
}
}
?>
189nobodyさん
2008/01/31(木) 17:51:38ID:???
フレームワーク使えば?
190◆lKs5QMUHoA
2008/01/31(木) 19:03:23ID:???
とりあえず、MVCに分けて枠組みを作ってみたけれど、
これをより抽象化させていって、「継承して使ってください」という
方向にするのか、それとも最初はクラスの数を増やさないように
しながら簡単なアプリケーションを作る方向にするべきか。
どっちの方向に持っていったほうがいいのか迷うな。。。

ま、そんなことを考える暇があったら手を動かしてみろという
話なのかもしれないが。。
191nobodyさん
2008/01/31(木) 19:08:05ID:???
>>190
自分で考えるのも良いが、君が今やっていることを
やってしまっているのが、フレームワークだ。

まず既存のフレームワークがどうなっているのか参考しろ。
192nobodyさん
2008/01/31(木) 19:44:25ID:???
俺も初心者だからこれが最善とは言い切れないけど
newするときに全部引数で渡すってのはナシじゃね?
分かりやすいところだけ書き出すと
[index.php]
$form = new CFControll();
[cfcontrol.php]
コンストラクタ()
{
 $form_str = $_POST['form'];
 $in_str = $_POST['key'];
 if(inだったら){
  $view = new CFView();
  $view->m_type = 'in';
  $view->Write_HTML();
 }
}
[cfview.php]
メンバ変数
var $m_file = 'index.php';
var $m_type = false;
var $m_line = null;
193192
2008/01/31(木) 19:50:52ID:???
フレームワーク使ってみろっていうのは賛成
疎結合にとかDRYにっていうのがだんだんわかってきた
理解したところで戻ってきて〜の方が結果的に早そう
俺はまだ勉強中だからそこまで行ってないけど
194◆lKs5QMUHoA
2008/01/31(木) 19:56:23ID:???
>>192
> $view = new CFView();
> $view->m_type = 'in';
これみたいに、直接メンバにアクセスするのは構造的に良くないと聞いたことが
あるよ。「データをやり取りするのは、インターフェースを通じて」という原則を
守るべきだと。
そうしなければ、CFViewクラスを改変する人は、そのクラスを使っている人の
コードを考慮して、メンバの値や変数名を自由に変える事が出来なくなるから。

なので、私は、コンストラクタで値を渡しても良いし、コンストラクタで値を渡して
いなければ、値を渡すためのインターフェースを使って渡すようにする仕様が
適当かなと思っている。
195192
2008/01/31(木) 20:08:35ID:???
汚染されちゃうけどコンストラクタで全部の値渡すよりはましじゃないかなあ
あとコンパイルするときに全部チェックしてくれる言語とそうじゃない言語ってのもある
phpなんだしゆるーくやればいいじゃん なんていうと怒られるかw
196◆lKs5QMUHoA
2008/01/31(木) 20:13:09ID:???
今調べて知ったのだが、オーバーロードは PHP ではできないらしい。
だったら、コンストラクタで値を渡すよりも、インターフェースで値を
設定するような仕組みになるだろうね。
コンストラクタだと、一度値を設定したら、そのオブジェクトが破棄される
まで、再度設定が出来なくなるから。
197nobodyさん
2008/01/31(木) 20:22:00ID:???
メンバ変数へのアクセスはsetter/getterを使う。これは議論の余地なし。
それを用意した上でコンストラクタに引数を渡すなら渡せば良い。
複雑で多くの設定をしなきゃならない時以外、
newした直後に使える状態になっている方が使いやすい。
> $view = new CFView();
> $view->m_type = 'in';
これをセットで書かなきゃならないなら、
> $view = new CFView('in');
と書きたい。

198◆lKs5QMUHoA
2008/01/31(木) 20:26:00ID:???
私は>>197さんの意見に同意だ。
「このモジュールを使う場合、このように書いてくださいね。」
というコードは、なるべく少ない方がいいからね。
なので、とりあえず設定の値はコンストラクタにいれるという
設計で書いてみた。
199◆lKs5QMUHoA
2008/01/31(木) 20:31:34ID:???
とりあえず、フレームワークを使ってみろという話が出ているが、
具体的にどのフレームワークを使って、どんなプログラムを書いて
みたらいいのか迷うなぁ。

とりあえずはこのあたりに載ってるものの、「和モノ」あたりからかな。
http://pc11.2ch.net/test/read.cgi/php/1197383840/3

フレームワーク自体の自作の話もいくつかあるみたいだ。
http://codezine.jp/a/article.aspx?aid=104
200192
2008/01/31(木) 20:36:05ID:???
viewに渡すデータはセッタで渡したくならない?
あとinなのかoutなのか分岐させるとしたらそれはコントローラ側の仕事なんじゃないかなと思うんだけど違うかな
201192
2008/01/31(木) 20:42:33ID:???
いや、見直したらそう書いてた
ごめん気にしないで
202◆lKs5QMUHoA
2008/01/31(木) 20:46:31ID:???
>>200
> viewに渡すデータはセッタで渡したくならない?
表示させるデータはセッタがいいだろうね。

> あとinなのかoutなのか分岐させるとしたらそれはコントローラ側の
> 仕事なんじゃないかなと思うんだけど違うかな
>>185のソースがそれにあたるものだと思ってたけど。
if( ($form_str == "")or($form_str == "in") ){
 省略
}elseif($form_str == "out"){
 省略
}
コントローラは、POSTしてきた値を見て、必要なModelやViewを
選択し、実行する役割なので、それを実現したつもり。
203◆lKs5QMUHoA
2008/01/31(木) 21:58:27ID:???
厳密にMVCを分けることは出来ない場合もあるということだけど、
CFControlクラスで、CFViewを使って表示する内容までもを
指定していする処理を書いていたのは間違いかな?

検索結果の表示や、データの更新の場合は、
Control→Model→View だけど、
ボタンを押した時の画面の展開のみの場合は、
Contol→View という流れとなり、Viewオブジェクトを
生成するクラスが異なるという処理でいいのかな?
204◆lKs5QMUHoA
2008/02/01(金) 07:38:53ID:???
「とりあえずはフレームワークを使ってみろ」という返事がきそうだけど、
各クラスの役割は以下のような感じでいいかな?

Control
・POSTでデータを受け取り、その値に不正なものが無いかをチェック。
・変なところからのアクセスではないかをチェック。
・$_POST["Form"]の値をみて、それに必要な画面と処理を判断する。

Model
・SQLを発行し、データを受け取る。
・データをViewクラスに渡す。

View
・フォームを表示する。(フォームごとにクラスを分けたほうがいいのかは迷うな)
・データを1件受け取り、tableタグでレイアウトを調整し、表示する。
205nobodyさん
2008/02/01(金) 09:44:17ID:???
とりあえずはフレームワークを使ってみろ
206nobodyさん
2008/02/01(金) 11:08:23ID:???
自分なりに調べて見つけたPHPのサンプルを使った解説ページも
読むとwebアプリについて学べるのではないかと思っている。
やることが多くなったけれど、とりあえずは以下の3本だてで
勉強してみることになるのかな。

MVCに分けて、簡単なアプリを自作する。
(ログイン、メニュー、検索条件指定、検索結果、データ編集などの画面があるもの)

和モノフレームワークを使って学ぶ。
簡単なアプリを自作する。
http://pc11.2ch.net/test/read.cgi/php/1197383840/3

サンプルで理解! フォームデータの受け渡し
http://www.atmarkit.co.jp/flinux/rensai/mysql5_03/mysql5_03a.html
207nobodyさん
2008/02/01(金) 12:06:10ID:???
ちいたんのソース見てみたけれど、
class CObject ってあって、必ずそれが継承されて作られてるよね。
これの都合って何なんだろう。(メリットは何?)
javaも.NETもこういう基本クラスがあるよね。
208nobodyさん
2008/02/01(金) 12:19:15ID:???
全部のクラスに共通するメソッド等が実装できる
209nobodyさん
2008/02/01(金) 13:06:22ID:???
>>208
サンクス。
でも、オーバーロードが出来ない場合は逆に足かせになる可能性もあるね。
例えば、継承されているクラスが沢山ある状況でObjectクラスに
メソッドを追加する場合とか。
210nobodyさん
2008/02/01(金) 16:28:22ID:???
喋るのはコントローラとモデル
コントローラとビュー
基本的にはね
211nobodyさん
2008/02/01(金) 16:49:11ID:???
少ない数のクラスを書いたり読んだりする程度であれば、すぐに分かるのだが、
フレームワークレベルのクラス構造となると、その構成が全く分からなくなって
来るんだよなぁ。何かコツのようなものはあるのかな?

処理の内容を追いかけると、次々に別のクラスに処理を渡す構造になっていて、
最後はあっけない、みたいな感じだ。

フレームワークを作る場合のクラスの設計手法を身につけるなどしないと
いけないのかも。
メンバに定義はしていないけれど、メソッドではその変数をエラーが
出ないように処理が書かれているっていう書き方は多いようだ。
そうしておけば、そのフレームワークを使う人は、クラスを継承して
メンバに値を代入するだけで良い。
212nobodyさん
2008/02/01(金) 18:37:23ID:???
このサイト、説明は分かるのだが、具体的に作っているコードは
MVCのうちどれにあたるのかがいまいちです。
http://www.stackasterisk.jp/tech/php/phpMvc01_01.jsp

Result.php は、Viewにあたるものという解釈でいいんですよね?
213nobodyさん
2008/02/01(金) 18:47:22ID:???
PHPでMVC関連のサイトを紹介で貼っておきます。

特集:第3回 PHPを思うままに操れるようになる「MVC」と「Smarty」 (1/4)
http://www.itmedia.co.jp/enterprise/0402/19/epn01.html
214nobodyさん
2008/02/01(金) 18:50:51ID:???
2004年って・・・・・・・
215nobodyさん
2008/02/01(金) 20:08:38ID:???
OOPに取り付かれている人のブログ

ハタさんのブログ : : php
http://blog.xole.net/category.php?k=php
216nobodyさん
2008/02/02(土) 07:42:39ID:???
PHPでね、イベントドリブンなWEBフレームワークとか自作してみるといいかも。

例えば、サブミットボタンの処理ハンドラがオーバーライドで記述可能で
そこでフォーム値をモデルに渡して処理させるみたいなやつ・・

「POST」や「GET」とかローレベルの概念は全て隠蔽されてて
フレームワークにイベント発生時のロジックだけ記述して終わりみたいなの・・・

そしてPHPであれこれ試行錯誤したあと、ASP.NETとか参考にするとね
PHPでOOPするバカらしさに気付くかもしれない・・・OTL
217◆lKs5QMUHoA
2008/02/02(土) 08:25:40ID:???
ASP.NET は、ちょっとだけやってみたことあるけど、概念的に違和感が
あって、やらなくなったな。
ある程度Webアプリを学んだ事のある人には便利なんだろうけれど、
初めて学ぶ人には、ドキュメントが少なすぎだし、いきなりイベントドリブンで
やるのはどうかと思った。

で、まずは、Webアプリの基礎をやるという意味合いでPerlをやってみた。
で、今はPHPをやっている。PHPそのものがOOPに完全な対応をしていない
ので、これで大規模なアプリを組むことも無いかなと思っている。
対応したとしても、それからノウハウが出てくるので、さらに数年先になる。

でも、学ぶ時は、既存のモジュールを使って早くやるのよりも、モジュール
なしの状態で、モジュールを作ってみる方がいいので、とりあえず今は
PHPでOOPです。
218nobodyさん
2008/02/02(土) 09:56:37ID:???
>>217
多分、その違和感のある概念がOOPの本質だと思うよ。
そしてその概念は、洗礼された実装に触れることでしか
身につかないとも思うんだ。

初心者こそイベントドリブンを真っ先に学習したほうがいいよ。
最終的に、理解し易く安全な実装方法に結びつくと思うからね。

PHPでOOPで実装ってケースはありだとは思うけど、
概念は別で学習した方が効率的だと思うんだ。
219nobodyさん
2008/02/02(土) 13:32:52ID:???
OOPに取り付かれているとか良くわからんw

普通にプログラミングしていると使うだろ?

switchに取り付かれているとかそういうレベルに聞こえるんだが。
220nobodyさん
2008/02/02(土) 15:21:16ID:???
MVCモデルでプログラミングする場合、Model から View へ処理を渡す経緯は、
どっちが正しいのかな?
・Control クラスのメソッド内で、Model クラスと View クラスのインスタンスを生成する。
 Control クラスが、Model からデータを受け取り、View クラスへデータを渡し、
 描画指示を出す。
・Model クラスのメソッド内で、View クラスのインスタンスを生成する。
 Model クラスが、Viewクラスへデータを渡し、描画指示を出す。
 Control クラスは、View クラスを一切操作しない。

それとも、こういうところまでは理論的には定めていないので、
ケースバイケースであり、どちらがよいというものは無いということかな?
221nobodyさん
2008/02/02(土) 15:36:53ID:???
お前は何を言ってるんだ
2221 ◆SWtzLesEmM
2008/02/02(土) 16:44:49ID:???
PHPでイベントドリブンですか?(・∀・)

…こんなのありました。^^
PHP イベントドリブン に一致する日本語のページ 約 10,600 件

●PRADO
http://www.pradoframework.com/wiki/index.php/Ja:What_is_PRADO
>PRADO はコンポーネントベースかつイベントドリブンなウェブアプリケーションを開発するためのPHP5フレームワークです。

●S2Prado.PHP5
http://labs.s2php5.jp/s2prado.php5
http://blog.xole.net/article.php?id=553
>S2Baseの方は待望のPRADO対応。

●Piece Framework
http://trac.piece-framework.com/piece-unity/wiki/ja/Start
>Piece_Unityは、Visual BasicやDelphiのようなイベントドリブンなフレームワークです。

●Delphi for PHP
http://www.codegear.com/jp/products/delphi/php
http://orz.qzlab.com/yamagw/index.php?Delphi%20for%20PHP%A4%CE%BB%C8%A4%A4%CA%FD
>イベントドリブンなロジックの実装が容易に実現する。

●Pharon
http://pharon.lolipop.jp/
>最大の特徴は、wizard によりイベントドリブン型のスケルトンを自動作成することです。
2231 ◆SWtzLesEmM
2008/02/02(土) 17:00:36ID:???
インターネット越しにイベント処理をさせるのが、WEBプログラミングの特徴ですね。
イベントドリブンは、PHPよりもむしろFlash/Flexとかで使われる仕組みなのでしょうか?

レガシーの中心でのOOP
http://kaede.to/~canada/doc/2005/07/06/
>Webプログラミングにおいて、ブラウザとのやり取りがレガシー(古典的)なデータ交換に過ぎず、これがWebプログラミングを難しくしている
>Webは1ページごとに毎回セッションが起動し、ドキュメントを表示するとすぐ終了する。
>オブジェクト指向プログラミングにおける利点の1つであるイベントドリブンなプログラミングは不可能だ。
>何しろ1セッションに1イベントしか発生しないのだから。
>と同時にセッション状態を保存する必要も出てくる。

http://www.adobe.com/jp/devnet/flex/articles/framework_beta_print.html
>インタラクティブ性に優れたイベントドリブンなインタフェイス

http://www.atmarkit.co.jp/fwcr/rensai/flex203/01.html
>イベント処理によってアプリケーションを構築する手法はイベント駆動型(イベントドリブン)と呼ばれます。

http://www.azul.systems-noel.jp/item_9.html
>Flex2はイベントドリブンなので、ビューに起こったイベントをコントローラのリスナでキャッチするように意識すれば、MVCの分離はきれいにできるようになっています。
>なんかほんとにJavaのSwingを使ってるような気分になりますね。

http://bitmap.dyndns.org/blog/archives/001215.html
>イベントドリブンモデルには、主に以下の 4 つのオブジェクトが登場する。
2241 ◆SWtzLesEmM
2008/02/02(土) 17:05:16ID:???
>>220
>・Control クラスのメソッド内で、Model クラスと View クラスのインスタンスを生成する。
こっちの方が、Controlにまとまっている分だけスッキリしており、分かりやすいコードになるんじゃないでしょうか?
225nobodyさん
2008/02/02(土) 17:24:12ID:???
>>224
レスありがとうございます。
1番目の方にすると、Modelクラスから取得したデータを
Viewクラスに渡すことになるので、その分余計にメモリや
CPUを消費してしまうのでは、と心配になって聞いてみましたが、
考えてみると、コードの見易さなどを優先するのがOOPですので、
そちらの方がいいですね。

でも、フレームワークのソースなどを見ていると、
各クラスが、メンバに、別のクラスへのリファレンスを持ってたり
するので、もっと理論に従った組み方があるのかも、と思っています。
226nobodyさん
2008/02/02(土) 17:36:37ID:???
>>184
ファイル:全部で8つ。index.phpを実行する。
抽象クラスと具象クラスに実装を分けてみました。
csv.txt(※前回と同じ)
index.php
cfcontrol.php

アブストラクトとして実装
cfview.php
cfmodel.php

コンクリートとして実装
data_model.php
index_view.php
output_view.php
227nobodyさん
2008/02/02(土) 17:38:02ID:???
[config.php]
<?php

// 実際の処理を行うスクリプトをインクルード
include("./index_view.php");
include("./output_view.php");
include("./data_model.php");
// 最初に呼ばれるビューのプレフィックス設定
define ('INDEX_VIEW_PREFIX', "Index");
// モデルクラスのプレフィックス設定
define ('MODEL_PREFIX', "Data");
?>
[index.php]
<?php
include("./cfcontrol.php");
$view_key = $_POST["view_key"];
$data = $_POST["data"];
$app = new CFControl($view_key, $data);
$app->Execute();
?>
228nobodyさん
2008/02/02(土) 17:39:03ID:???
[cfmodel.php]
<?php
class CFModel
{
var $file_name; // 読み込むファイル名
function CFModel() {}// コンストラクタ
function Execute($param) // パブリックメソッド
{
return $this->_OnExecute($param);
}
function _OnExecute($param) // 仮想メソッド
{
trigger_error('オーバーライドしてね。', E_USER_ERROR);
}
}
?>
[cfview.php]
<?php
class CFView
{
var $file_name; // POSTするファイル名
function CFView() {} // コンストラクタ
function Execute($param) // パブリックメソッド
{
return $this->_OnExecute($param);
}
function _OnExecute($param) // 仮想メソッド
{
trigger_error('オーバーライドしてね。', E_USER_ERROR);
}
}
?>
229nobodyさん
2008/02/02(土) 17:39:58ID:???
[cfcontrol.php]
<?php
include("./cfview.php");
include("./cfmodel.php");
include("./config.php");
class CFControl
{
var $_view_key; // 呼び出すビューのプレフィックス
var $_data; // モデルに渡すデータ
function CFControl($view_key, $data) // コンストラクタ
{
$this->_view_key = $view_key;
$this->_data = $data;
}
function Execute() // パブリックメソッド
{
// モデルオブジェクト動的生成
$model_class_name = MODEL_PREFIX . 'Model';
$model = new $model_class_name();
$param = $model->Execute($this->_data);
// ビューオブジェクト動的生成
$view_key = $this->_view_key;
if ($view_key == "") $view_key = INDEX_VIEW_PREFIX;
$view_class_name = $view_key . 'View';
$form = new $view_class_name();
$form->Execute($param);
}
}
?>
230nobodyさん
2008/02/02(土) 17:40:48ID:???
[data_model.php]
<?php
class DataModel extends CFModel
{
function DataModel() // コンストラクタで取得先のファイル設定
{
$this->file_name = 'csv.txt';
}
function _OnExecute($param) // オーバーライドメソッド
{
$INFILE = fopen($this->file_name,"r");
$data = fgets($INFILE, 1024);
fclose($INFILE);
$data = $data . ", " . $param;
return $data;
}
}
?>
231nobodyさん
2008/02/02(土) 17:41:48ID:???
[index_view.php]
<?php
class IndexView extends CFView
{
function IndexView() // コンストラクタでPOST先のファイル設定
{
$this->file_name = 'index.php';
}
function _OnExecute($param) // オーバーライドメソッド
{
echo "<html><body>";
echo '<form method="POST" action="' . $this->file_name . '">';
echo '<input type="hidden" name="view_key" value="Output">';
echo '<input type="text" name="data"><input type="submit" value="送信">';
echo "</form></body></html>";
}
}
?>
232nobodyさん
2008/02/02(土) 17:42:29ID:???
[output_view.php]
<?php
class OutputView extends CFView
{
function OutputView() // コンストラクタでPOST先のファイル設定
{
$this->file_name = 'index.php';
}
function _OnExecute($param) // オーバーライドメソッド
{
echo "<html><body>";
echo '<form method="POST" action="' . $this->file_name . '">';
echo '<input type="hidden" name="form" value="Index">';
echo "$param<br>";
echo '<input type="submit" value="戻る"></form></body></html>';
}
}
?>
233◆lKs5QMUHoA
2008/02/02(土) 19:04:13ID:???
>>226-232
サンプルソースありがとうございます。
抽象クラスの書き方に慣れてますね。私はこのあたりを
しっかりとやってなかったのでちょっと苦手です。
ま、しっかりと勉強していきたいと思います。(^^;

ソースを読んでいて、1点気になったので質問をしたいのですが、
class CFView と class CFModel において、以下のように
パブリックメソッドと仮想メソッドを作り、パブリックメソッドから
仮想メソッドを実行する形式にソースを書いた理由は何でしょうか?
出来ましたら、この設計にした意図を教えていただきたいと思います。

function Execute($param) // パブリックメソッド
{
return $this->_OnExecute($param);
}

function _OnExecute($param) // 仮想メソッド
{
trigger_error('オーバーライドしてね。', E_USER_ERROR);
}
234◆lKs5QMUHoA
2008/02/02(土) 19:24:37ID:???
>>218
レスありがとうございます。
イベントドリブンそのものは、VBでWindowsアプリを組んでやったことがあるので
すぐに入れたのですが、Webアプリを作る際、イベントドリブンでしかやった事が
無いというのは致命的だと思ったので、PerlやPHPでやってみています。
(ASP.NETは、便利ではあるが、IISを使えとか、.NET Frameworkを使えとか
非常に限定される。)

構造化プログラミングで、あまり命名規則を考えずにプログラムをしていると、
グローバル変数や関数が多くなった時、その把握が出来なくなったりする
わけなのですが、そういう苦労する体験をした後、OOPを習うと、その便利な部分が
見えてくるわけです。OOPは経験による結論的な理論だな、と理解できるわけです。
その理解のために、とりあえず、苦労をする方法(PHP で 0 から OOP)で
やってみているのです。
今は、このように考えています。
235nobodyさん
2008/02/02(土) 19:59:40ID:???
人間て暖かいにゃぁ
ポカ・ポカ テンキュー
236nobodyさん
2008/02/02(土) 21:30:36ID:???
>>233
PHP4では全てパブリックだけど例えばC#では以下の実装になるんだ
public object Execute(object parpam)
protected virtual object _OnExecute(object parpam)

CFControlから_OnExecuteメソッドを隠蔽する意図なんだよ。
_OnExecuteはCFViewやCFModelのサブクラスにだけ見えれば十分なんだ。
237◆lKs5QMUHoA
2008/02/03(日) 11:17:44ID:???
>>235
暖かいですねぇ。


>>236
なるほど。ありがとう。
238◆lKs5QMUHoA
2008/02/03(日) 14:47:56ID:???
ソースを読んでいて気になった点がありますので、質問させていただきます。
includeの構成についてです。まず、各ファイルに書かれているincludeの部分をまとめます。

[index.php]
include("./cfcontrol.php");
[cfcontrol.php]
include("./cfview.php");
include("./cfmodel.php");
include("./config.php");
[config.php]
// 実際の処理を行うスクリプトをインクルード
include("./index_view.php");
include("./output_view.php");
include("./data_model.php");

これは、MVCフレームワークは、以下の3つのファイルであり、
[cfcontrol.php][cfmodel.php][cfview.php]
それを拡張する形で、残りの6つのファイルを付け加えた形
なので、このようなincludeの構成ということでよろしいのでしょうか。
239◆lKs5QMUHoA
2008/02/03(日) 14:50:55ID:???
includeをばらばらとさせるよりも、以下のように整理したほうが
となんとなく思ったりもしたのです。

[index.php]
include("./config.php");

[config.php]
include("./cfcontrol.php");
include("./cfview.php");
include("./cfmodel.php");
include("./index_view.php");
include("./output_view.php");
include("./data_model.php");
240nobodyさん
2008/02/03(日) 15:27:26ID:???
MVC?な俺にはここが一番わかりやすかった
実例コードが載ってるのがいい

PHPでMVC第1回:前編
http://www.stackasterisk.jp/tech/php/phpMvc01_01.jsp
241nobodyさん
2008/02/03(日) 15:52:25ID:???
javaのサイト見ろよ
242nobodyさん
2008/02/03(日) 16:56:56ID:???
やけに伸びるな
243◆lKs5QMUHoA
2008/02/03(日) 19:47:22ID:???
ソースコードをちょっとだけ改変したものを作ってみた。
メモとかを残していく都合もあると思ったから、HP解説してみた。
http://www.geocities.jp/narutobakijp2/
本当は、>>1さんがソースの管理とかもしてくれたりしたら、うれしいw
244nobodyさん
2008/02/04(月) 01:44:33ID:???

いちいちzipを解凍する気にならない
245nobodyさん
2008/02/04(月) 09:02:58ID:???
>>243
CFViewクラスに具体的な実装をしちゃダメなんだよ。
そもそもHTMLのフォーム処理とかは、あとでPEARとか使えばいい。

サブクラスをうまく呼び出す仕組みだけを実装していくんだ。
246nobodyさん
2008/02/04(月) 14:12:44ID:???
>>244
> サブクラスをうまく呼び出す仕組みだけを実装していくんだ。
kwsk
247nobodyさん
2008/02/04(月) 23:36:13ID:???
>>246
構造化プログラミングはルーチンを呼ぶ方向で実装すると思うけど
OOPではルーチンに呼ばれる方向で実装して行く感じだよ。

大枠の骨組みだけを抽象クラスで作成して、処理は具象クラスで行うんだ。
インターフェイスさえ同じならあとで個別にパーツを交換出来たりするからね。

だったら基底クラスのメソッドなんて数個で十分じゃないかと思うんだ。
やたら複雑でよくばりな機能のクラスなんて、再利用の価値がないからね。
248◆lKs5QMUHoA
2008/02/05(火) 01:28:01ID:???
>>247
レスありがとうございます。
> 構造化プログラミングはルーチンを呼ぶ方向で実装すると思うけど
> OOPではルーチンに呼ばれる方向で実装して行く感じだよ。
私は、継承を活かした設計をした事が無かったので、ちょっと方向性を
誤ってしまったようですね。

Viewは、表示をつかさどるのだから、html表示を請け負うのでは、と
思っていたのですが、それよりも抽象的な枠組みを定義するという
ことですね。

となると、html表示は(PEARを使わないのであれば、)htmlタグの
記述を行うCF_HTMLクラスを作り、Viewの具象クラス内で
インスタンスを生成ということですよね?
249nobodyさん
2008/02/05(火) 08:55:19ID:???
>>248
HTML処理のヘルパクラス作成はあまりOOPの勉強にならないとも思うんだ。
もう既に頭の中で実装出来ているだろうし、引数を関数で処理するだけでしょ?

それよりも例えばPEARのHTML_QuickFormやテンプレートレンダラのSmartyを
Viewと連携させる仕組みとかを考えたりした方がよっぽど面白いよ。

すべてをフルスクラッチするプログラミングの方向性は必ずしも得策じゃないよ
既存のライブラリやコンポーネントを上手く利用するのもOOPの要素なんだよ。
250nobodyさん
2008/02/05(火) 11:06:34ID:???
OOPで継承を用いた設計について調べてみた。(OOP理論の入門ではなく、
継承を用いた設計などが入った解説)
この連載は良いかもしれない。

オブジェクト指向プログラミング超入門
.NETでオブジェクト指向プログラミングを始めよう
http://www.atmarkit.co.jp/fdotnet/basics/oop_index/index.html

特に第6回は、今まで出てきていた話題だと思う。
Objectクラスで仮想メソッドToStringをもち、それから派生したクラスは、
オーバーロードをする仕組みを図説していて分かりやすい。

第6回 階層の頂点に立つクラス
http://www.atmarkit.co.jp/fdotnet/basics/oop06/oop06_01.html
251nobodyさん
2008/02/05(火) 11:52:25ID:???
>>250
PHPのプログラマにも非常に参考になると思いますよ。

.NETの世界はクラスベースなので初めからOOPの思考で実装します。
関数が作れないので構造化思考のVB6プログラマとか、クラスをnewせずに
引数を大量に渡すスタティックメソッドを呼んだりしてしまいます・・・

PHPはC言語での関数モジュールを呼び出す実装スタイルに近いので
やはりクラスを使って構造化プログラミングをしちゃいがちですね。

普及しているPHP4がOOP対応不十分なのと、開発環境が貧弱であることも
PHPでOOPがなかなか利用されない原因になってたりしますよね。

プロテクテッドメソッドの概念とかIDEがないと、なんでそうするのか
なかなか理解出来ないとも思いますしね。
252nobodyさん
2008/02/05(火) 11:56:50ID:???
いくらかのデータを登録し、その内容を検索するWebシステムで使用する
クラス構成で、Viewに絞った構成を考えてみた。

[View]
├[認証]
├[個人情報入力]
├[メニュー]
├[検索指定]
├[検索結果]

別の案として、[View]から[Input View]と[Output View]の
二つを継承し、さらに以下のような継承も浮かんだけれど、
継承して分ける必要性は無さそうなので、上記の方が良いように思う。

[Input View]
├[認証]
├[個人情報入力]

[Output View]
├[メニュー]
├[検索指定]
├[検索結果]
253nobodyさん
2008/02/05(火) 12:16:06ID:???
>>252
[View]
├[LoginView]
├[InsertView]
├[MenuView]
├[SelectView]
├[ResultView]

こんな感じ?
254nobodyさん
2008/02/05(火) 13:28:44ID:???
Debug用出力のメソッドをView(基底クラス)に追加するといいだろうね。
各画面([LoginView] [InsertView] [MenuView] ・・・)で
エラー確認用のメソッドをオーバーロードする形で。
開発中はPOSTで受け取ったデータとかを画面上部に表示しながら動作確認する
っていうのは、よくやるからね。

Objectクラスを継承する形にするのは、このスレでは共通したメソッドの
実装という理由だ。という話だったけど、リファレンス関係の処理で
便利だという話がサイトに載っているようだね。
このあたりの考え方も活かすと良いかもしれない。
ただ、PHPのOOPだとうまく実装出来ないかもしれないが。
>>207-209 >>250
255nobodyさん
2008/02/05(火) 13:44:31ID:???
Modelクラスも以下のメソッドを追加するという感じで設計すると良いのかな。

Select // データ取り出し
Delete // 削除
Insert // 新規追加
Update // 既存データの更新

>>228に載ってる既存のクラスには Execute があるけれど、
これも残しておくべきかな?
256◆lKs5QMUHoA
2008/02/05(火) 19:03:57ID:???
案がいくつか出てきたので、前回の駄目なソースを破棄して
またソースコードをリニューアルしようかと思ったが、
いざやり始めてみると、データベースを管理する基底クラスの
設計を具体的にどうするかをきめないといけなくなり、それを
どうするかで迷っている。。。

概ね以下のような感じにしたいと思ってるんだけどね。
DB格納の基底クラス:CFDB
テキストファイルに保存するクラス:Text_DB extend CFDB
PostgreSQLに保存するクラス:PostgreSQL_DB extend CFDB
MySQLに保存するクラス:MySQL_DB extend CFDB

で、この3つのいずれかのインスタンスを Model のメンバに持たせる。
現在のコード(CFModelのメンバ)
var $file_name; // 読み込むファイル名
更新案のコード
var $m_db; // データベースを格納。
257nobodyさん
2008/02/05(火) 20:33:23ID:???
>>255
普通は機能をメソッドに振り分けると思うけど
コントローラのメソッド内で以下の様に
操作出来たら面白くない?

// モデルにフォーム値を渡してデータ書き込み
$insert = $this->models['InsertModel'];
$insert->setItem('name',  $_POST['name']);
$insert->setItem('title', $_POST['title']);
$insert->setItem('body',  $_POST['body']);
$insert->execute();

// ビュー表示用にデータをロードする
$select = $this->models['SelectModel'];
$data = $select->execute();

>>256
自分なりに試行錯誤で機能を実装してみるのも楽しいかもね。
誰か>>252のアプリ作成に必要な要求仕様作ってよ。
258◆lKs5QMUHoA
2008/02/05(火) 23:02:08ID:???
>>257
要求仕様案

私は眼鏡屋(○○支店の店長)をやっている。
顧客の情報(名前、住所、性別、生年月日、・・・)を管理したい。

・眼鏡を購入した顧客の情報を登録しておき、ある一定期間経つと
新しい眼鏡を購入する案内のDMを発送したい。
→条件検索をしたい。
・登録した情報を検索し、どんなお客様かをすぐに確認出来るようにする。
→例えば、苗字を聞いて、詳細が分かるようにする。
・眼鏡の定期的なメンテナンスで、訪問してきたら、その対応履歴を
登録しておきたい。
→眼鏡のクリーニング、シリコンパッド(鼻にあてるやつ)の交換など
・定期的なメンテナンスは無料であるので、全く店に来ない客には、
その無料案内のDMを発送したい。
→今回は、複数の店舗にまたがった処理はいらない。
・他の社員に勝手に情報を触られないように、認証を通すようにする。

眼鏡の在庫管理は、このシステムとは別。

これは、プログラムの規模が大きくなりすぎるようであれば、
もちろん内容を変えてもいいです。「顧客の情報を登録し、
それを検索する」という流れだと、勉強用サンプルとして非常に
良いのでは、と思いました。
259◆lKs5QMUHoA
2008/02/05(火) 23:21:24ID:???
[データの入力例]
氏名:茂名
フリガナ:モナー
性別:男性
生年月日:H1/3/3
住所:東京都・・・
コメント:ふちなしタイプを希望している。

眼鏡購入日:2007/1/5
眼鏡の型番:2ch

[2007/1/5に購入した2ch]のメンテナンス履歴
2007/2/5:クリーニング
2007/3/15:ネジの交換
2007/5/1:クリーニング、曲がったフレームの修正


顧客のデータ1件に、眼鏡の購入日がつながり、さらに、メンテナンス履歴が
つながる構成になるけれど、今回は勉強用なので、「顧客のデータ1件=眼鏡の購入日1件」
としてもいいかもね。
再度購入したら、顧客の個人情報を0から入力しなおすみたいな。
260◆lKs5QMUHoA
2008/02/06(水) 01:36:05ID:???
View の Debug メソッドの仕様もどうするかで迷っている。
Execute($param)したあと、Debugとか、もしくは、
Debugの中でExecute($param)を呼び出す処理だと、
<html>タグのそとに確認データが出力されてしまう。

Debug モードを on にすれば、<body>タグの上部に
テーブルで区切ってデータが表示されるとかかな。
だったら、メンバにDebugモードを追加かな。
という感じに考えてる。

みんなどう思う?
261nobodyさん
2008/02/06(水) 09:30:01ID:???
>>258
ちょっとしたシステムじゃん・・ (´・ω・)
それこそ既存のフレームワーク使用する案件だよ。

>>260
ディレクティブ付けたechoやvar_dump埋め込みで十分だと思うよ。
むしろその機能を実装するより、デバッガ環境構築した方がいい・・・

OOPに対する基本的概念への理解があまりにも無さ過ぎると思うんだ。
>>255にしても、Executeメソッドに呼ばれる仕組み作ってんのに、
なんで新しいメソッド実装して直接呼びたがるんだろう?

あれほどインタフェイスだけで実装するんだと(ry
それよりコントローラの実装仕様どうするの?
2621 ◆SWtzLesEmM
2008/02/06(水) 10:44:17ID:???
>>243
>http://www.geocities.jp/narutobakijp2/

↓動作サンプルを設置しました。
http://ssurl.net/so2o

↓コードに関するコメントのまとめ(>>184-226辺り)
http://ssurl.net/h8bu
263nobodyさん
2008/02/06(水) 11:45:05ID:???
>>262
非常に乙です。m(_ _)m

>>226だけど >>1さんにここまでやって貰っちゃって申し訳ないし
これぞOOPってサンプルを必死に実装してアップするんでしばしお待ちを・・
264nobodyさん
2008/02/06(水) 13:18:03ID:???
>>263
はやくアップしろよなw

俺がそれ見て勉強して、いつかエロイ人になったら
お前を雇ってやるよ! 感謝しろ
265◆lKs5QMUHoA
2008/02/06(水) 16:04:09ID:???
>>262
動作サンプルまでつけていただいて、ありがとうございます。
過去ログも、そのままコピペするんじゃなくて、色をつけたり
分類したりすると非常に分かり易いですね。

ShiftJISだったりとか、スペース2個というのは標準じゃないとかは
気づいてたのですが、そこまで治していただいて申し訳ないです。
266nobodyさん
2008/02/06(水) 16:34:44ID:???
MVCって難しいね。
267nobodyさん
2008/02/06(水) 17:31:55ID:???
>>266
別にわかんなくったって、やってけるから大丈夫。
無理に背伸びする必要は無い。
268◆lKs5QMUHoA
2008/02/06(水) 20:19:07ID:???
フレームワークの解説に関するサイトを見つけました。
ここで概要をつかんだ後、実際に触れてみるといいかもしれない。

ASP.NET vs. Struts
フレームワーク徹底比較[前編]
http://www.atmarkit.co.jp/fdotnet/special/aspstruts01/aspstruts01_04.html

この文章書いてる人、ネットワーク関連の書籍でよく見かけるよね。
269nobodyさん
2008/02/07(木) 10:03:39ID:???
>>261
> OOPに対する基本的概念への理解があまりにも無さ過ぎると思うんだ。
> >>255にしても、Executeメソッドに呼ばれる仕組み作ってんのに、
> なんで新しいメソッド実装して直接呼びたがるんだろう?

> あれほどインタフェイスだけで実装するんだと(ry

ちいたんのフレームワークは、Modelにinsertやdelを持ってるからそれを
参考に設計してみたんだけど。
http://php.cheetan.net/manual/model.php

俺はこれから勉強していくところなので理解がないのは認めるが、
このあたりはどういう見解なのかを教えて欲しい。
今回作るMVCフレームワークは、学習用なのでもっと簡潔な
レベルなのを想定しているとか、ちいたん作っている人がOOPに
関する理解が無いだけだとか。
270nobodyさん
2008/02/07(木) 10:24:36ID:???
>>269
フレームワーク実装に正解も不正解も無いと思うけどね・・

例えば
・クラスを使った構造化的メソッド呼び出し
$model->insert();
$model->del();
よりも
・ポリモーフィズム
$insert->execute();
$del->execute();
のほうがインターフェイスが規定されていて
簡潔で安全だと説明したかったんだよ。

insertメソッドやdelメソッドを呼ぶ文脈が規定されていたらどう?
insertオブジェクトのexecuteメソッドならオブジェクトが
文脈をコントロール出来るでしょ? どうかな?

学習用だからこそ『呼ばれる仕組み』で実装しようとしているんだよ。
271nobodyさん
2008/02/07(木) 10:55:50ID:???
>>270
レスサンクス。となると、
class CInsert extend CView、class CDel extend CView、・・・
みたいな設計にするということ?

ちょっと大雑把になってるけど、CInsertはこんな感じに実装するとか。
(テーブルのフィールドは、a,b,cという場合。)
class CInsert extend CView{
var $field_a;
var $field_b;
var $field_c;

function setItem($field, $data){
if($field == "a"){
$field_a = $data;
}
if($field == "b"){
$field_b = $data;
}
if($field == "c"){
$field_c = $data;
}
}

function _OnExecute($param){
$fp = fopen($file_name,"a");
$write_line = $field_a . "," . $field_b . "," . $field_c;
fwrite($fp,$write_line);
fclose($fp);
}
}
272nobodyさん
2008/02/07(木) 11:32:07ID:???
じゃ、用件仕様はこんな感じで良いのか?

[認証]
→・ID、パスワードにて認証
 ・認証成功で[メニュー]へ移動

[メニュー]
→・(新規)[個人情報入力]、[検索指定]画面へ移動するボタンがある

[個人情報入力]
→・名前、性別 を登録

[検索指定]
→・氏名のキーワードを含む検索、性別指定が出来る。

[検索結果]
→・条件に一致するデータを一覧で出す。
 ・個人情報を修正したい場合は、ここから[個人情報入力]へ移動する。
 ・個人情報を削除したい場合は、ここで削除ボタンを押す。
273nobodyさん
2008/02/07(木) 12:35:22ID:???
>>271今こんな感じ。
[DataModel.php]
<?php
/**
 * データModel抽象クラスです。
 */
class DataModel extends Model
{
# @access private
var $_items;

# @access public
var $file_name;

# @access public
function setItem($key, $value)
{
$this->_items[$key] = $value;
}

# @access public
function getItem($key)
{
return $this->_items[$key];
}
}
?>
274nobodyさん
2008/02/07(木) 12:36:19ID:???
[InsertModel.php]
<?php
/**
 * データ追加Model抽象クラスです。
 */
class InsertModel extends DataModel
{
# @access sealed
function & _onExecute(&$param)
{
return $this->_OnInsert(&$param);
}
# @access protected
function & _onInsert(&$param)
{
trigger_error('オーバーライドして下さい。', E_USER_ERROR);
}
}
275nobodyさん
2008/02/07(木) 12:37:26ID:???
[SampleInsertModel.php]
<?php
/**
 * データ追加 サンプルクラスです。
 */
class SampleInsertModel extends InsertModel
{
# @access protected
function & _onInsert(&$param)
{
// ここで初めてユーザ定義のメソッドを実行する。
// FWからここが呼ばれるまで待ってるのがポイント!
// INSERTイベントの処理ハンドラに記述するともとれるね。
return $this->_saveData();
}
/**
* ユーザ定義のプライベートメソッド
*/
# @access private
function _saveData()
{
// リクエストは以下のインターフェイスで取得。
$value = $this->getItem('hoge_data');
// ここで初めてHogeHogeする。
// DBオブジェクト呼ぶなりご自由に!
return $data;
}
}
?>
276nobodyさん
2008/02/07(木) 13:59:04ID:???
細かい指摘になるけれど、継承関係の勉強中なので質問で書き込みします。

[InsertModel.php]
class InsertModel extends DataModel
function & _onExecute(&$param)  のところは、
return $this->_OnInsert(&$param);  となっているけれど、
return $this->_onInsert(&$param);  が正しいという解釈で良いのですよね?
277nobodyさん
2008/02/07(木) 14:16:55ID:???
>>273-275
ソースのサンプルサンクス。
イメージしてたよりも継承が多いですね。

全体ソースコードの可読性よりも、クラス単位での
再利用性を考えた場合は、このような構成になる
のでしょうね。早く慣れないといけません。
278nobodyさん
2008/02/07(木) 15:36:22ID:???
まだ中身が出来ていない状況なので、修正の必要はあるだろうけど、
こんな感じでドキュメントもまとめていくと、分かりやすくなるだろうね。

■SampleInsertModelクラス[SampleInsertModel.php]
Model - DataModel - InsertModel - SampleInsertModel

◎概要
DBへのデータの記録、読み取りを行うクラス。

◎メンバ一覧
[publicコンストラクタ]
SampleInsertModel()

[publicメソッド]
setItem($key, $value):setter。フィールド名を指定し、データを登録する。
getItem($key):getter。フィールド名を指定し、データを取得する。
Execute($param):setItemでセットしたデータをDBに記録する。

◎使用例
$model = new SampleInsertModel(); // クラスのインスタンスを生成する。
$model->setItem('Name', 'Tarou'); // [Name]フィールドに[Tarou]を登録する。
$model->setItem('Sex', 'man'); // [Name]フィールドに[man]を登録する。
$model->Execute(); // setItemで登録したデータをDBに書き込む。
279nobodyさん
2008/02/07(木) 23:22:51ID:???
>>263 ひとまず出来ました・・疲れました・説明は後でアップしようと思います・・
http://proxy.f3.ymdb.yahoofs.jp/bc/4525b767_dfac/bc/452a/PHP%a5%d5%a5%ec%a1%bc%a5%e0%a5%ef%a1%bc%a5%af.zip?BCUjxqHB4brtVvJJ
280◆lKs5QMUHoA
2008/02/07(木) 23:27:16ID:???
>>279
乙です。じっくりソースを読んでみます。
281◆lKs5QMUHoA
2008/02/08(金) 08:04:01ID:???
せっかくプログラムを作っていただいたのだから、みんなでその説明文章をまとめるといいかもね。
例えば、こんな感じでhtmlで書いておいて、ファイル名をクリックすると、その詳細の説明のページに飛ぶとか。

[abstract]
  [controls]
    空
  [models]
    DataModel.php、DeleteModel.php、InsertModel.php、SelectModel.php、UpdateModel.php
  [views]
    HtmlQuickFormSmartyView.php、RenderView.php
[controls]
  MainControl.php、SkeletonControl.php
[data]
  空
[framework]
  Base.php、Control.php、Model.php、View.php
[lib]
  Request.php
[models]
  SampleInsertModel.php、SampleSelectModel.php、SkeletonSelectModel.php
[smarty]
  [cashe]
    空
  [templates]
    index_tmple.html、output_tmple.html
  [templates_c]
    空
[views]
  HtmlQuickFormSmartyIndexView.php、HtmlQuickFormSmartyOutputView.php
  IndexView.php、OutputView.php、SkeletonView.php

app.log、appconf.php、csv.txt、hoge.txt、index.php、Main.php、userconf.php
282nobodyさん
2008/02/08(金) 08:10:57ID:???
>>281
>>279ですがphpDocumentorで今作っているのでちょっと待っててね。
283nobodyさん
2008/02/08(金) 08:52:15ID:???
phpDocumentorにソース読み込ませて吐かせただけです。
http://proxy.f3.ymdb.yahoofs.jp/bc/4525b767_dfac/bc/452a/PHP_FW_DOC_01.zip?BCKv5qHBVNsncE.h
フォルダ内のindex.htmlです、荒いですがご容赦を。

とりあえずトライアルなんでまだリファクタ出来そうだけど・・

[コントローラの処理]
_form_onLoad
_buttonHoge_onClick

[モデルの処理]
_onSelect
_onInsert

[ビューの処理]
_onRender

上記のイベントハンドラにユーザ処理を記述して
フレームワークに呼んでもらう構造になってます。
>>216を実装したつもりです・・・
有名なハリウッドの法則です。

[カプセル化]は良いとして、やはり[継承]と[ポリモーフィズム]を
うまく使うのは最初難しいかもしれない・・
これらの実装もデザパタとしてライブラリ化されたものに過ぎないけどね。
284nobodyさん
2008/02/08(金) 09:26:17ID:???
ファイルが見れん・・・
285nobodyさん
2008/02/08(金) 11:03:39ID:???
OOP FW ソース
http://proxy.f3.ymdb.yahoofs.jp/bc/4525b767_dfac/bc/452a/OOP_FW_02.zip?BCE07qHBz_6Z6R84
OOP FW ドキュメント
http://proxy.f3.ymdb.yahoofs.jp/bc/4525b767_dfac/bc/452a/OOP_FW_DOC_02.zip?BCE07qHB2C3Z36pC

すいません再アップしました、ドキュメントにControlが反映されてませんでした。
286nobodyさん
2008/02/08(金) 11:20:06ID:???
サンクス
287nobodyさん
2008/02/08(金) 11:51:38ID:???
全体構成の把握はまだ出来てないけれど、只今、ソース解析中・・・
いちゃもんつけるつもりじゃないけれど、気になった点を2つ。

Control.phpのPOSTされたSubmitボタン名取得のところは
クラス化されてないのはどうしてなのでしょうか?
さらに非常にクラスが多くなって面倒になるから?

class Control extends Base
var \$_view_calss;
このメンバはあえてclassにしてない理由はあるのでしょうか。
288nobodyさん
2008/02/08(金) 12:39:56ID:???
>>287
POSTされたサブミットボタン名取得部分は説明の通りです・・
今その部分をC#でのデリゲートで実装しようと思ってます。

Viewクラスexecuteのところもこのままでは$eパラメータが
コントローラから任意に渡せないので検討中です。

オブジェクトにexecute以外のパブリックメソッドを
実装しないのが目標です・・(※アクセサ以外)
289nobodyさん
2008/02/08(金) 13:12:48ID:???
クラスの継承関係が結構複雑になってますね。
Documentsいただいても、追いかけていって、全体構造を把握するのが結構大変。
例えば、SampleInsertModelからその元を追っていくと、以下のような継承構造。
Base - Model - DataModel - InsertModel - SampleInsertModel

俺のメモとして、SampleInsertModelを追いかけていった様子をまとめておく。

■Base(抽象)クラス[fw/framework/Base.php]
●パブリックメソッド
& execute(&$param, $e) →アプリのログを記録する。_onExecute(&$param, $e)を実行
●プロテクテッドメソッド
_onExecute(&$param, $e) →サブクラスでオーバーライドして使用。

■Model(抽象)クラス[fw/framework/Mode.php]
●プロパティ
$src_file_name; // 読み込むファイル名
$dst_file_name; // 書き込むファイル名
290nobodyさん
2008/02/08(金) 13:15:33ID:???
■DataModel(抽象)クラス[fw/abstract/models/DataModel.php]
●フィールド
$_items; // コントロール値のハッシュを保存
●パブリックメソッド
setItem($key, $value) // コントロール値を受け取り、$_itemsに代入
getItem($key) // $_itemsの値を返す。

■InsertModel(抽象)クラス[fw/abstract/models/InsertDataModel.php]
●シールドメソッド
& _onExecute(&$sender, $e) →onInsert(&$sender, $e)
●プロテクテッドメソッド
& _onInsert(&$sender, $e) →オーバーライドして使用する。

■SampleInsertModelクラス[fw/models/SampleInsertModel.php]
●プロテクテッドメソッド
$ _onInsert(&$sender, $e) →ここにユーザ定義のコードを記述する。_saveData()を実行
●プライベートメソッド
_saveData() →現在未実装。
291nobodyさん
2008/02/08(金) 13:32:42ID:???
こうやってみてみると、クラスを継承する際の設計思想が見えてくるな。
どの段階で実装を替えるかを考えた場合、どのクラスを置き換えれば良いかも分かる。

しかし、俺はこれまでフレームワークの構成などをじっくり読んだりしたことが無いので、
つい、ここまでクラスを継承させるメリットがあるのかなとか思ってしまう。
なんか、1つのメソッドを実装するのに、1回継承してるって感じだよね。

例えば、Model(抽象)クラスの $src_file_name を別のものにする場合、
それ以降のクラスが全部影響するかの確認が必要なわけだから、
Model(抽象)クラス以降のものをすべて一つのクラスにまとめて書いても
同じなんじゃないかと思えてしまう。
こういうのとは別な場面で、継承しているメリットがあるってことかな?
292nobodyさん
2008/02/08(金) 13:51:09ID:???
ちょっと紹介しておきますね。

フレームワークを使った開発のメリット、デメリットを教えてください
http://q.hatena.ne.jp/1188498291

特集:第1回 フレームワーク「Struts」の基礎を知る (3/8)
フレームワークのメリットとデメリット
http://www.itmedia.co.jp/enterprise/0310/06/epn03_3.html
293nobodyさん
2008/02/08(金) 15:31:59ID:???
Control の & _onExecute(&\$param, \$e) で
\$this->_view_calss = \$view_calss;
というコードがあるけれど、右辺の \$view_calss って、
何処でも定義されてないですよね?
このまま動かすと、nullが入るだけのように思えるんだけど。
294nobodyさん
2008/02/08(金) 16:04:40ID:???
Viewクラスの継承関係で、かいつまんだ一覧を書いておきます。
個別にはDocに書いてはあるけれど、こういう書き方みると分かりやすくない?

Base - View - RenderView - IndexView

■Base(抽象)クラス[fw/framework/Base.php]
(省略)

■View(抽象)クラス[fw/framework/View.php]
●プロパティ
$post_file; // POSTするファイル名

■RenderView(抽象)クラス[fw/abstract/views/RenderView.php]
●プロテクテッドメソッド
& _onExecute(&$sender, $e) // _onRender(&$sender, $e)を呼ぶ
& _onRender(&$sender, $e) // サブクラスにてオーバーラードする。

■IndexViewクラス[fw/views/IndexView.php]
●コンストラクタ
$this->post_file = 'index.php';
●プロテクテッドメソッド
& _onRender(&$sender, $e) // オーバーライド
 →html出力する。テキストボックスと送信ボタン
295nobodyさん
2008/02/08(金) 16:20:36ID:???
>>293
1行上のフックハンドラ実行の結果を渡している。
296nobodyさん
2008/02/08(金) 16:41:04ID:???
ロードメソッド[MainControl::_form_onLoad(&$sender, $e)]が(POSTパラメータが
無い場合に呼ばれるメソッド)呼ばれるまでの経緯をたどってみたが、非常に複雑だ。。。

[fw/index.php]が実行される。
Mainクラスのインスタンスが生成され、execute(&$app, $e)が実行される。
Base:: & execute(&$param, $e) にて、 Base:: & _onExecute(&$param, $e)が実行される。
これは、Main::execute(&$app, $e)にてオーバーライドされている。
Controlクラスのインスタンスが生成され、execute(&$app, $e)が実行される。
Base:: & execute(&$param, $e) にて、 Base:: & _onExecute(&$param, $e)が実行される。
これはControl:: & _ onExecute(&$param, $e)にてオーバーライドされている。
Control:: & _onExecute(&$param, \$e) にて、Control::_hookedUpControler(&\$sender, \$e)を呼び出す。
Control::_hookedUpControler(&\$sender, \$e) にて、Control::_form_onLoad(&$sender, $e)を呼ぶ。
これはMainControl::_form_onLoad(&$sender, $e)にてオーバーライドされている。
MainControl::_form_onLoad(&$sender, $e) が実行される。

継承関係
Base - Control - MainControl
Base - Main
297nobodyさん
2008/02/08(金) 17:33:12ID:???
リンク

symfony入門(1):symfonyで始めるPHPフレームワーク
http://codezine.jp/a/article/aid/704.aspx?p=1

Zend Framework入門(1):フレームワークの全体像とインストール
http://codezine.jp/a/article/aid/1824.aspx?p=1
298◆lKs5QMUHoA
2008/02/08(金) 18:46:07ID:???
>>285のファイルが落とせない・・・
299nobodyさん
2008/02/08(金) 19:33:52ID:???
>>298 見れるはずですが・・以下はどうですか?
Eclipceでのデバッグ画面です
PHPでOOP->画像>3枚
300nobodyさん
2008/02/08(金) 22:21:47ID:???
>>298どうでしょうか?
http://briefcase.yahoo.co.jp/bc/oopfw
301nobodyさん
2008/02/08(金) 22:24:55ID:???
なんでPHP4文法でやってんの?
302◆lKs5QMUHoA
2008/02/08(金) 23:53:42ID:???
>>300でいけました。サンクスです。
303◆lKs5QMUHoA
2008/02/09(土) 01:49:09ID:???
これは、>>1さんのサイトでは、「入力フォームを作ってみる」とは
別で、「フレームワークを作ってみる」の演習という位置づけにした
方がいいかもしれないね。

これからの流れとしては、上のほうにあるように、このソースを
解読・改変していくための補助ドキュメント作成の方向と、
このフレームワークを使ってみる人のためのドキュメント作成
(チュートリアルみたいなもの)になるだろうね。
出来る範囲でみんなで手伝っていってみましょう。

このフレームワークは、MFCみたく、あらかじめ準備された
クラスのメソッド中に書き加えていくスタイルなのかな?
それとも、VBみたいにそういうソースコードを全部隠蔽
してしまう方向でいくのかな?ちょっと気になった。
304◆lKs5QMUHoA
2008/02/09(土) 02:12:22ID:???
こうやってソースを読んでみると、これまで抽象的に聞いていた
フレームワークを使ったプログラミングのメリットとデメリットが実感できるね。

今まで、システムを組む際はOOPやフレームワークを使う方向にするべきだと
思ってたけれど、そうでもなく、状況や目的に合わせて選択する
というのが良い事が分かってきたような気がする。

小規模で全体概要を把握したいとか、移植性を考える場合は、フレームワークよりも、
クラスライブラリを使うスタイルの方が良い場合もありそうだ。
305◆lKs5QMUHoA
2008/02/09(土) 08:12:13ID:???
MVCでフレームワークを自作する方向と、クラスライブラリを自作する方向の
2つの方向をやってみて、それぞれのメリットとデメリットを確認していけば、
システムを作る場合の検討材料に出来ると思う。

何でもフルスクラッチしていき、なるべく依存性は無いようにし、(言語の
バージョンくらいに収めるとか)その組み合わせでアプリを作る、みたいな。
306nobodyさん
2008/02/09(土) 09:45:19ID:???
再度リファクタしてみました。
http://briefcase.yahoo.co.jp/bc/oopfw

[Controlクラス]
・リクエストオブジェクトの参照の重複の削除
・サブクラスでのフックハンドラ処理修正
・Viewオブジェクトの実行方法修正
※これはViewオブジェクトハンドリングの自由度をました反面、
ユーザからの取り回しが煩雑になったかもしれませんね・・

[Modelクラス]
・継承関係の見直し、ItemBaseクラスの導入などです・・
MVCの継承関係が美しくないですが・・

>>291
リファクタしながら構成を練っていってますが
継承クラスでの責任が小さい単位で分割されていると
大きく修正が入った時も楽だと思います。

>>303
MFCもVB6もフックハンドラに処理を記述していく方式なので
それを参考にしています、サンプルFWも自由にいじってもらって
参考にしてもらえたら良いと思います。
>>305クラスライブラリ方式もいいかもしれないですね。
307nobodyさん
2008/02/09(土) 10:20:45ID:???
フレームワークのメリットとデメリットにおいて、なるべく具体例を書いた形でまとめてみた。

【メリット】
1.ビューとロジックの切り分けが出来る。(共同作業時に便利)
 http://www.atmarkit.co.jp/fdotnet/aspandvs/aspandvs01/aspandvs01_01.html
2.定型的なコードを何度も書かなくてよくなる。
 例えば、ASP.NETでは、POSTの値を取得して・・・などの事を考えなくて良い。
 テキストボックスやボタンも、画面にドラッグするだけ。
3.ソースコードが自動的にフレームワークの規約に従った記述方法となり、
全体的な処理構成が把握しやすく、メンテナンスが楽になる。
 例えば、構造化プログラミングならば、まず全体構成(どの関数がどんな役割を
 持っているかなど)を把握し、そこから問題部分を探すことになる。
 フレームワークの場合は、まずはこのイベントハンドラの部分を見れば良いなという事が分かる。

【デメリット】
1.フレームワーク自体の使い方を学ばなければならない。
・言語の基本ルールとは異なった、フレームワーク特有の記述方法があるため、すぐに組めない。
 ASP.NETでは、IsPostBack の概念を学ばなければならない。
 http://www.atmarkit.co.jp/fdotnet/dotnettips/043postback/postback.html
 ちいたんでは、function action( &$c )とか、$c->という書き方と機能を把握しなければならない。
 http://php.cheetan.net/manual/tutorial.php
・フレームワーク自体にも得手・不得手など特徴があり、それを把握しなければならない。
 ASP.NETはIISが必要な為、自動的にサーバOSはWindowsが必須となり、依存性がある。
 ASP.NETとStrutsの比較は、以下のサイトを参照
 http://www.atmarkit.co.jp/fdotnet/special/aspstruts01/aspstruts01_01.html
2.フレームワーク自体に問題があると対処が困難。
 例えば.NET Framework のバグは、開発元の不具合修正を待つしかない。
 オープンソースのフレームワークであっても、ソースコードが大量な為、把握が出来ない。
308nobodyさん
2008/02/09(土) 11:01:52ID:???
QA方式で書いてみた。

Q:どんな時にフレームワークを使った方がいいの?
・短期間で仕上げなければならない時(この場合はフレームワークの使い方を把握しているのが前提)
・チームで分担してシステムを組む時
・バージョンアップを行うなど、長期的な運用が想定される時

Q:フレームワークがあまり向かない場合は?
・個人で小規模アプリを組む時。(一度組んで終わりの場合など)
・そのアプリの全体構成をすみずみまで把握しておきたい場合
・サーバの移植を想定しなければならないなど、環境があまり固定出来ない場合
このような状況の場合は、クラスライブラリの使用を検討すると良い。
309nobodyさん
2008/02/09(土) 11:18:48ID:???
何かフレームワークを使ったとして、そのフレームワークがいつまでメンテされるか
判らないことを考えると、バージョンアップをするようなアプリの開発に向いていると
いえるかどうかは、かなり怪しいと思う。
310nobodyさん
2008/02/09(土) 11:25:52ID:???
>>309
そういうケースもあるから入れるか迷ったんだよね・・・
だけど、現在の比較的規模の大きなアプリは何らかのフレームワークで
組まれている事実があるということで、書いてみた。
フレームワークのメンテが突然打ち切られるケースは無いと見ても
良いと思うけどね。事前に何らかのアナウンスがあるはず。

で、フレームワークそのものを入替える必要が生じた時は、もちろん
全部作り直しになるが、この労力は、フレームワークを使わない場合に
比べて楽だよね。という意見です。
311nobodyさん
2008/02/09(土) 12:20:07ID:???
書いてみた、とかって適当かつ無責任な
312nobodyさん
2008/02/09(土) 12:23:25ID:???
完璧な文章がいきなりかけるわけないんだから修正しながらでいいと思う。
適当だの無責任だのいうのなら、このスレに来なくて良いと思う。
313nobodyさん
2008/02/09(土) 12:32:04ID:???
ひょっとして、つられた?
314nobodyさん
2008/02/09(土) 15:20:46ID:???
つんでれた
315nobodyさん
2008/02/09(土) 15:25:19ID:???
>>308
> Q:フレームワークがあまり向かない場合は?
> ・そのアプリの全体構成をすみずみまで把握しておきたい場合
全体構成を隅々まで把握してなんの意味があるのだろうか?
どうせ数日たったら忘れるんだし。

> ・サーバの移植を想定しなければならないなど、環境があまり固定出来ない場合
> このような状況の場合は、クラスライブラリの使用を検討すると良い。

PHP4、PHP5両対応のフレームワークもあるし、
いろんなデータベースに対応している場合もある。

フレームワークの開発というのは、そもそもが環境が固定されていないので
そういう場合にはなおさらフレームワークを使ったほうが良い。
316nobodyさん
2008/02/09(土) 15:29:20ID:???
理解と記憶は別物だと思うけどな。
317nobodyさん
2008/02/09(土) 16:52:42ID:???
>>315
> 全体構成を隅々まで把握してなんの意味があるのだろうか?
> どうせ数日たったら忘れるんだし。
じゃ、この項目は消しておきます。


> PHP4、PHP5両対応のフレームワークもあるし、
> いろんなデータベースに対応している場合もある。
> フレームワークの開発というのは、そもそもが環境が固定されていないので
> そういう場合にはなおさらフレームワークを使ったほうが良い。
PHPスレで言うのもなんだけど、ASP.NETなども含めた総論という考えだったんだけどね。
Windowsサーバなのかなどを気にするとか、PHP5のみ対応のフレームワークで
開発していて、PHP4しか対応していないサーバで動かすことになる場合を
という意味で、環境が固定されない書きました。
318nobodyさん
2008/02/09(土) 17:04:40ID:???
修正案

Q:どんな時にフレームワークを使った方がいいの?
・短期間で仕上げなければならない時(この場合はフレームワークの使い方を把握しているのが前提)
・チームで分担してシステムを組む時
・バージョンアップや不具合修正など、納品後もメンテナンスが想定される時

Q:フレームワークがあまり向かない場合は?
・個人で小規模アプリを組む時。(一度組んで終わりの場合など)
・サーバの移植を想定しなければならないなど、環境があまり固定出来ない場合
 このような状況の場合は、クラスライブラリの使用を検討すると良い。
319nobodyさん
2008/02/09(土) 22:32:17ID:???
あえてPHP4の構文でやってるのは、PHP4との互換性を保つため?
PHP5でやっちゃうと、PHP4の環境で動かなくなるから。
320◆lKs5QMUHoA
2008/02/10(日) 03:19:14ID:???
ChStrクラスの件を再開しようかな。
3211 ◆SWtzLesEmM
2008/02/10(日) 18:45:04ID:???
>>300
>http://briefcase.yahoo.co.jp/bc/oopfw
ソースコードを見てビックリ!(・∀・)
コメントが丁寧に書いてあり、OOPを学習する上でとても助かります!
貴重なサンプルを提供していただき、どうもありがとうございました。m(_~_)m

現時点で、バージョンがOOP_FW_02とOOP_FW_03の2つあるみたいですが、とりあえずOOP_FW_02の方をまとめページに掲載させていただきました。
http://ssurl.net/8vyv

>>281
http://ssurl.net/cp7a
ちょっとずつ読んでますが、全部はまだ理解できないです。(´;ω;`)
レスも参考にしてみます。
(=分からないことでも、検索で調べるときのヒント・手掛かりになるので)
322nobodyさん
2008/02/10(日) 22:19:07ID:???
>>321
乙です。m(_ _)m
>>306ですが今後は
・認証の仕組み
・ロギングの仕組み
・エラーハンドリングの仕組み
・バリデイトの仕組み
・トークンの仕組み
・リダイレクトの仕組み
・入力→確認→完了の仕組み
・コアオブジェクトの実行権限の仕組み
など実装していく予定です・・

でも、こればっかりやってるわけにいかないので
気長に見守ってやって下さい。
323◆lKs5QMUHoA
2008/02/11(月) 02:31:35ID:???
>>321
乙です。分かりやすくまとまっていますね。
私も少しずつ読んでいって理解しようと思っています。
他のものに比べ、コメントが多いのが助かりますよね。


>>322
読むほうも時間がかかると思いますので、
一気にやらなくていいと思います。(^^;
324◆lKs5QMUHoA
2008/02/11(月) 02:35:18ID:???
MVCフレームワークを作っていただいてる流れとはおもいっきり違う事をいうけれど。

>>1さんのOOPで掲示板を作るところは、もう少しクラスを分けたほうが
いいと思ったので、自分なりに作ってみました。

index.phpに、いろいろと処理を詰め込んでいるような感があったので、
それを分ける考え方です。
しかし、DBはテキストベースにしているとか、書き込み欄と表示欄を
同じページにしているなど、基本構成から大幅に変えています。(^^;

http://www.geocities.jp/narutobakijp2/
OOPの勉強として、簡易なBBSを作ってみました。
BBS Version1(2008.2.11)
325◆lKs5QMUHoA
2008/02/11(月) 08:27:05ID:???
クラス間のデータのやり取りにおいて、Listクラスを使う設計にしたけれど、
PHPの場合はハッシュでよかったような気がする件。
まだまだ未熟だな・・・

今後は、これを構造化指向へ変換したプログラムを作り、うpする予定です。
この両方のプログラムを見比べてみることで、OOPのメリットとデメリットが
見えてくるかもしれません。
326nobodyさん
2008/02/11(月) 10:26:11ID:???
OOPの継承やポリモーフィズムについての概念やそのコードの書き方に
ついては分かったけれど、その設計方法のノウハウの文章はぐぐっても
なかなか見当たらない。
「設計というのはそれぞれで目的次第」といってしまえばそうだけど、
hiroxpepeさんのソースや、.NET Framework や java の各クラスの
継承関係の設計を見ていると、何か共通したものを感じる。
その具体的な方針と、それを取る理由がはっきりとは分からない・・・

何か良い文章を見かけた、もしくは知っている方は、お願いします。
327nobodyさん
2008/02/11(月) 10:50:14ID:???
◎「メンテナンスを行う場合」の比較

【構造化指向の場合】
ソースコードに書かれている関数とグローバル変数が、どういう階層で組まれているか
(どの関数でどの関数が使われているか。また、どのグローバル変数を使っているのか)
は、その関数の処理内容と、その関係などを把握してからでないと、手をつけられない。
新しくグローバル変数や、関数を追加する場合。また、ローカル変数を宣言する場合は、
その名前がソースコード内で使われているかを都度チェックしなければならないので、
面倒である。

【オブジェクト指向の場合】
ソースコードそのものがクラス単位で分けられているため、手をつける場所がすぐに
分かる。他のクラスに影響するのは、そのクラスとのインターフェースを変更した場合のみ。
新しくメンバやメソッドを追加する場合は、そのクラスの中で使われているメンバや
メソッドを確認するだけなので、対象となる範囲が狭く、チェックが楽。
また、プログラムそのものがクラスで部品化されるため、チームを組んで、分担作業で
プログラミングがやり易い。

【注意】
構造化プログラミングであっても、関数やグローバル変数の名前の付け方を工夫すれば、
もちろん対応は可能である。そのため、メンテナンスを想定する場合は、
オブジェクト指向でなければならないわけでもない。
オブジェクト指向は、構造化指向に比べて特別に「これが出来る」というものではなく、
構造化指向で不便に感じる部分の便利機能である。
328nobodyさん
2008/02/11(月) 10:57:47ID:???
>>324,325
なかなか参考になりました、ありがとう。
326さんのおっしゃる通り、"設計"は経験なんかも必要になってくるので、
考えるよりも手を動かして、簡単なスクリプトを組んでみるのが最良でしょうか。
329nobodyさん
2008/02/11(月) 12:43:38ID:???
>>326
・リファクタリング―プログラムの体質改善テクニック
マーチン ファウラー著

高いけどOOPに興味のある方には絶対お勧めですよ。
ポリモーフィズム適用の具体例がコードで解説されていますよ。

構造化プログラミングではGOTO構文を使うのはNGだけど
同様にOOPではswitch構文を使用しません。
ここの部分をポリモーフィズムで実装するのです。

あなたのプログラムにswitch構文がありますか?
その部分はポリモーフィズムで置き換えられますよ。
330nobodyさん
2008/02/11(月) 12:53:28ID:???
>同様にOOPではswitch構文を使用しません。
>ここの部分をポリモーフィズムで実装するのです。

これは言いすぎ。
OOの基本はモデリングであって、コーディングのスタイルじゃない。
331nobodyさん
2008/02/11(月) 13:07:00ID:???
>>329
情報ありがとうございます。
> 構造化プログラミングではGOTO構文を使うのはNGだけど
> 同様にOOPではswitch構文を使用しません。
> ここの部分をポリモーフィズムで実装するのです。

> あなたのプログラムにswitch構文がありますか?
> その部分はポリモーフィズムで置き換えられますよ。

この表現はすごく分かりやすかったです。
こういう感じの具体的なノウハウがあると分かりやすいですね。


>>330
「言いすぎ」というご指摘もごもっともだと思います。
しかし、OOPは、構造化指向に比べてダントツで良い所があるわけでも
ないので、(このため、すべてがOOPに移項してはいない。)
良いところを説明する際は、多少は強調した感じで言わざるを
得ないところがあると思っています。
332nobodyさん
2008/02/11(月) 13:39:48ID:???
>>330
そうですね、確かに言い過ぎました・・

GOTO構文は習いませんでしたが、switch構文は習得しちゃいました。
あえてそれを使用しないで組んでみるのも勉強になるのではないでしょうか?

構造化的スタイルとOOP的スタイルを手っ取り早く理解しようとするなら
それぐらいのパラダイムシフトが必要だと思うんです。

もちろんGOTO構文もswitch構文もコーディングには必要です。
333nobodyさん
2008/02/11(月) 15:01:11ID:???
switchがいらないということは、
if文もいらないな。

それともswitchを使わずに、
if文で書けばいいのかw
334◆lKs5QMUHoA
2008/02/11(月) 18:07:43ID:???
>>328
(なんか、自分語りみたいなレスになっているけれど、
OOPの勉強方法についての意見交換にもなるかと思ったので書いておきます。)

私は、プログラミングをこれから勉強しようという時、「無駄・ムラ・無理なく
勉強する」という予備校の受験勉強の風潮を受けていましたので、先生に
「プログラミングを勉強する場合は、どんな風なやり方をしたら良いですか?」
とか「どんな順番で勉強をしていったら良いですか?」と聞いたことがあるのですが、
その先生は、「そんなことを考えている時間があるなら、その分コーディングを
した方が良い」とアドバイスをしました。

実際に手を動かしてやってみると、文章や口頭の説明では言えない、何か体感的な
ものが習得でき、その後の勉強方針もどうやったら良いのかが見えてきました。
「ああ、あの言葉は、こういう意味なんだな」と思いました。
プログラミングは、実技の世界なのだから、実際に手を動かしてみて見えてくるものだと
思っています。

過去に表計算をするプログラムを構造化指向で組むと、処理を関数に分けていく方法が
身についたなと思いました。なので、今度は、構造化指向で苦労をするプログラミングを
してみると、OOPの良さが見えてくるのでは、と思っています。
335◆lKs5QMUHoA
2008/02/11(月) 18:16:42ID:???
BBSの構造化バージョンをうpしました。

http://www.geocities.jp/narutobakijp2/index.html
OOPの勉強として、簡易なBBSを作ってみました。
BBS Version2(2008.2.11)入力したデータで改行に対応してなかったので、その部分を修正。
BBS Version2の構造化Ver(2008.2.11)上記プログラムの構造化バージョンです。
336nobodyさん
2008/02/12(火) 04:15:37ID:E8FcAvF5
そもそも起動したら即終了するようなPHPプログラミングにOOを使う必要性が感じられない。
337nobodyさん
2008/02/12(火) 09:16:19ID:???
ここは必要性を語るスレじゃないですよ
338nobodyさん
2008/02/12(火) 10:36:27ID:???
>>336
なんで実行時間とOOの必要性に関連があるの?

>>337
それは了見が狭すぎでしょ。
339nobodyさん
2008/02/12(火) 11:35:52ID:???
>>336じゃないけど、オブジェクトは状態を保存しておくものだから。
複雑なデータを持つオブジェクトを作っても、mod_phpはリクエストの度にプロセス生成・終了するわけで、そのオブジェクトも消える。
そもそもウェブアプリはユーザからのリクエストを受けて処理が発生しする構造だから、オブジェクトを永続化しておくことにあまり意味はない。
オブジェクト指向に興味があるなら、GUIのあるアプリケーションとか、ゲームとかを作ってみるとよいよ。
340nobodyさん
2008/02/12(火) 12:57:39ID:???
永続化されていないオブジェクトには意味がほとんどないという主張ならば、どうだろうね。

Booch先生も、「永続性」に対して、「有用ではあるがオブジェクトモデルにとって
なくてはならない要素というわけではない」 って言ってるし。
(もう絶版だけど、Booch法第2版 2.2節より)
341nobodyさん
2008/02/12(火) 13:17:09ID:???
>>336だけどphpはプロセスを生成してから破棄するまでに処理を1度しか行わない関数?が多いし、
イベントが非同期で発生したりするわけでもないからOOを使うのはどうかなー?って気がする。
だいたいフローチャートで処理書けちゃうしね。

あとデータベースなりファイルなりからデータを読み込んでそれをオブジェクトの形に整形して・・・・
って処理が無駄な気がする。
実際に行う処理よりもその整形処理が長かったりするとなんか本末転倒なような。
342nobodyさん
2008/02/12(火) 13:23:42ID:???
>>341
>あとデータベースなりファイルなりからデータを読み込んでそれをオブジェクトの形に整形して・・・・
>って処理が無駄な気がする。

なるほど、それはそうだね。
いわゆるロジック的なものがほとんどない Webアプリってのは存在するし。(っていうか大半かも)

フレームワークでもなんでも、整理してるつもりで回りくどいだけってのは多い気がする。
話に付き合ってくれて、どうもありがと。
343nobodyさん
2008/02/12(火) 14:28:33ID:???
> いわゆるロジック的なものがほとんどない Webアプリってのは存在するし。(っていうか大半かも)
どう考えても少数だろw

ロジック無しで何が作れるというんだ?w
344nobodyさん
2008/02/12(火) 14:34:01ID:???
> そもそもウェブアプリはユーザからのリクエストを受けて処理が発生しする構造だから、オブジェクトを永続化しておくことにあまり意味はない。
その理屈だと、PHPに限らず、JavaでもRubyでもオブジェクト指向は要らないということになるな。
それにアプリでも終了すると消えるわけで、結局はウェブアプリと同じ。

そもそもデータベースやファイルにデータを保存するのも
オブジェクトの保存・永続化なわけだが?

> あとデータベースなりファイルなりからデータを読み込んでそれをオブジェクトの形に整形して・・・・
> って処理が無駄な気がする。
> 実際に行う処理よりもその整形処理が長かったりするとなんか本末転倒なような。
だからフレームワーク使うんじゃん。
345nobodyさん
2008/02/12(火) 14:42:23ID:???
>>343
単純に、SQLにパラメータ設定して、実行して、検索結果をエスケープしてHTML/XMLのタグつけて
返してるだけで出来てるWebアプリって多そうだけどな。ロジックというほどのもんでもないでしょ。

>>344
ムダなのは実装時間じゃなくて、CPU時間でしょ。
フレームワークで解決する問題じゃないと思うが。
346nobodyさん
2008/02/12(火) 14:50:23ID:???
>>345 訂正
「本末転倒」って言葉からすると、実装量なのかな。
取り消します。
347◆lKs5QMUHoA
2008/02/12(火) 18:36:45ID:???
>>341
> あとデータベースなりファイルなりからデータを読み込んでそれをオブジェクトの形に整形して・・・・
> って処理が無駄な気がする。
> 実際に行う処理よりもその整形処理が長かったりするとなんか本末転倒なような。
これはもともとOOPの特性じゃない?
再利用性や保守性を高めるために、他の処理とを完全に切り分ける代わりに、
構造化指向よりも、コード量が多く、動作が重くなるというのは。
これは、個人で組む小規模プログラムでは無駄でしかないが、チームで組んだり、
改変がある場合には威力を発揮する、という類のことでしょ。
348◆lKs5QMUHoA
2008/02/12(火) 18:50:13ID:???
確かに私もWebアプリの世界ではOOPの意味は少ないと思う。
指摘にあるように、フローチャートがかけるような処理しかしていないので、
主にPerlやPHPで構造化指向でコーディングするスタイルが流行っているのだと思う。
(PerlやPHPのOOP対応は未だに不十分なところがある)
また、ネットにあるサンプルアプリは構造化指向のものが非常に多い事からも、
構造化指向で十分に組めることを意味しているのだと感じる。

通常だと、「だったら、WebアプリをOOPで組む必要ないよね。」となるわけだが、
私がそれでもあえてOOPをやっているのは、その有用性などを自分で体感する形で
確認したいからだ。
大規模なアプリとなると、WebアプリでもOOPを活用して組むことが多いと聞くが、
それは具体的にどのような場面で、どのような有用性があるからなのか。それらを確認したい。

最近は、どうも(Webアプリの世界では)OOPの有用性を見るよりも、
各種フレームワークの有用性を確認した方が良いのでは、と感じている。
349nobodyさん
2008/02/12(火) 19:23:14ID:???
> 確かに私もWebアプリの世界ではOOPの意味は少ないと思う。
> 指摘にあるように、フローチャートがかけるような処理しかしていないので、

OOPの意味が少ないの理由がおかしい。
フローチャートがかけるような処理しか”貴方が”していないから
必要ないといっているだけであって、そうではないものはOOPの意味がある。

「Webアプリはフローチャートがかけるような処理」という前提がそもそもおかしい。

> 大規模なアプリとなると、WebアプリでもOOPを活用して組むことが多いと聞くが、
> それは具体的にどのような場面で、どのような有用性があるからなのか。それらを確認したい。

OOPの有効性、そのものがわかってないだけじゃないか?

> 最近は、どうも(Webアプリの世界では)OOPの有用性を見るよりも、
> 各種フレームワークの有用性を確認した方が良いのでは、と感じている。

各種フレームワークは、すべて(といって問題ないレベルで)OOPで
作られていることを知らないの?
350nobodyさん
2008/02/12(火) 19:40:22ID:???
>>349
別にOO的なモデリングをしなくても複雑さが増大しないのであれば、OOを選択するのは技術的な理由ではないでしょ。
前提がおかしいと主張するなら、どうおかしいのか言わないと、それこそ意味がない。
351nobodyさん
2008/02/12(火) 19:58:37ID:???
>>349
じゃあ貴方がOOPを教えてあげたら?
352nobodyさん
2008/02/12(火) 20:39:12ID:???
>>349
どういう利点があんの?
353nobodyさん
2008/02/12(火) 22:43:18ID:???
クラスを使ってるだけで、オブジェクト指向でも何でもないよ。ウェブフレームワークは。
オブジェクト指向を謳うなら、オブジェクトをシリアライズしてDBやセッションに保存するくらいはしないと。
そんなフレームワークがどれだけある?
354nobodyさん
2008/02/12(火) 22:58:38ID:???
なんで永続性に拘るんだろ。
355nobodyさん
2008/02/12(火) 23:01:04ID:???
なんでオブジェクトに拘るのかってこと。
356nobodyさん
2008/02/12(火) 23:08:25ID:???
ウェブアプリで扱うデータのほとんどはRDBMSだけど、RDBMS自体はフラットなデータ構造でまったくオブジェクト指向ではない。
だから、RDBMSからオブジェクトにいったん変換するんだけど、最終的にはHTMLというやはりフラットな構造に戻さないと行けない。
例えばgmailみたいに非常に複雑な処理が要求されるサイトなら、いったんオブジェクトにするのは有効と思うけど、gmailみたいなサイトは例外的。
ほとんどのウェブサイトは、ただDBに入った値を表示するだけでいい。
357nobodyさん
2008/02/12(火) 23:14:02ID:???
>>356 あっそ、じゃおまえがオブジェクト使わずに書けばいいだけじゃね?
358nobodyさん
2008/02/12(火) 23:19:02ID:???
OOプログラミングってのは、OO的にモデリングしたものをプログラミングすることであって、
オブジェクトを使ってプログラミングすることではないでしょ。

これを区別しないのは 「VC++で作ったからオブジェクト指向だ」って言うのと同じ。
359nobodyさん
2008/02/12(火) 23:28:46ID:???
>>358
概念じゃなく具体的なコードで説明して下さいお願いします。
360nobodyさん
2008/02/12(火) 23:37:53ID:???
そんなんムリ( ゚Д゚) 本でも読んで勉強して。

今まで読んだ本でOOに関して一番良かったのは Booch法:オブジェクト指向分析と設計 なんだけど、
いくら Booch法自体が古いとは言え、こうした本が絶版になってしまっているというのは、なんとも悲しい。
361nobodyさん
2008/02/12(火) 23:59:12ID:???
勉強したい人が集まってるんだから、必要・不必要で論争しなくても……。
362nobodyさん
2008/02/13(水) 00:22:08ID:???
>>336だけど話が広がり過ぎて正直びっくりしてる。
別にOOPしてもいいと思うよ。
俺もクラス使うし。
ただWebプログラミングだとクラス使っただけの手続き型プログラムになりがちだから
OOPの恩恵に与りにくいんじゃないかなーって思っただけ。

たとえば俺はいまPHPでゲーム組んでるんだけど
普通のゲームプログラムとかだと

$char_list[] = new Player();

for($i=0; $i<N; $i++)
{
 $char_list[] = new Enemy();
}

while($game_loop)
{
 foreach($char_list as $char)
 {
  $char->Move();
  $char->CheckHit();
  $char->Draw();
 }
}

exit(0);

みたいな感じになるけど
363nobodyさん
2008/02/13(水) 00:22:41ID:???

Webプログラミングだと

$buf = DataRead();

$player = new Player();

$player->SetData($buf);

$player->Move();
$player->CheckHit();
$player->Draw();

$buf = $player->GetData();

DataWrite($buf);

exit(0);

みたいなのになりがちじゃん。
364nobodyさん
2008/02/13(水) 00:23:37ID:???
それなら

DataRead();

PlayerMove();
PlayerCheckHit();
PlayerDraw();

DataWrite();

exit(0);

でもいいじゃん的な気がするってだけ。

まぁひとえに俺のプログラミング力不足だと思うけど。
365nobodyさん
2008/02/13(水) 00:42:03ID:???
また Booch法から引用すると 「ハンマーを手にする者には世界中の全てのものが釘に
見えるように、オブジェクト指向の考えに染まった開発者は世界中の全てのものがオブジェクトで
あると考え出す。この観点は少々無邪気すぎる。」だそうで、若干感情的な議論を呼びやすい
テーマではあると思う。

そういえば、同じ様なことが フラクタルとか 1/fゆらぎの本にも書いてあったな。
人間なんてそんなもんだ。
366nobodyさん
2008/02/13(水) 09:32:28ID:???
>>360
・構造化プログラミング三要素
STEP01 順次進行
STEP02 条件分岐
STEP03 繰り返し

・OOプログラミング三要素
STEP04 カプセル化
STEP05 継承
STEP06 ポリモーフィズム

WEBデザイナがPHP使ったところでSTEP01止まり、
MS OFFICEのマクロ/VBAもそんな感じだね。
ifやforを使わず延々と処理を記述してるのあるよね。

STEP04で思考を止めちゃ駄目なんだ。
勉強の為に「継承」「ポリモーフィズム」を使った
プログラムをあえて書いてみるんだ。

モデリング云々とかそんなの関係ないんだよ。
そもそもここは>>1でしょ?
367nobodyさん
2008/02/13(水) 11:21:35ID:???
>モデリング云々とかそんなの関係ないんだよ。

思考を止めてるのは誰だよ。
368nobodyさん
2008/02/13(水) 11:29:38ID:???
モデリング無しにOOPで書けるんですか?
369nobodyさん
2008/02/13(水) 11:42:59ID:???
>>367>>368
じゃあモデリング房が設計について判りやすく教えたら?

OOPの概念すら理解出来ない初心者に上流から教えるんですか?
ぐだぐだ言ってないで初心者に判りやすく為になる発言したらどう?
370nobodyさん
2008/02/13(水) 11:50:58ID:???
モデリングが重要かもしれないっていう情報を教えてもらったんだから、それで満足しろよ。
あとは自分で本でも読め。
371nobodyさん
2008/02/13(水) 11:52:02ID:???
この基地外まだいるのか
372nobodyさん
2008/02/13(水) 12:09:17ID:???
>>370
あれれ?モデリングを判りやすく教えてくれるんじゃないんだ?
さては本当は自分も理解して(ry
373nobodyさん
2008/02/13(水) 12:27:30ID:???
OOP有用性の議論にDBの実装の話がこびり付いている。
純粋な議論ではないと思う。
374nobodyさん
2008/02/13(水) 13:28:08ID:???
熱意ある奴がケーススタディとして『やってみて』いるんだからさ
酸いも甘いも知ってる方はOOPで作るべきっていう良いお題を
出してあげたら盛り上がるんじゃないか
375nobodyさん
2008/02/13(水) 15:14:37ID:???
PHPでOOPの議論すること自体おかしい
オブジェクト指向が有用だからこそ
java,c++.c#,ruby最近の言語は全てOOPになってる
大規模なものをつくるのにOOPじゃないと非効率すぎる
376nobodyさん
2008/02/13(水) 15:17:14ID:???
簡単にいうと
規模が小さいほどOOPの必要性が無くなり
規模が大きいほどOOPの必要性がでる
377nobodyさん
2008/02/13(水) 15:18:55ID:???
規模が小さいならスパゲッティコードが最強てこと
大きいならOOPじゃないとはなしにならない
378nobodyさん
2008/02/13(水) 15:21:38ID:???
OOを議論するのにPHPをベースにするのはどうかと思うが、PHPにおけるOOを議論することは良いんじゃないの。
あと、規模というよりは複雑さだろうな。
379nobodyさん
2008/02/13(水) 15:35:17ID:???
OOPの話は荒れる元だな・・・よし、



〜〜〜〜〜〜〜〜〜ここからOOPネタ禁止〜〜〜〜〜〜〜〜〜〜〜〜〜〜
380nobodyさん
2008/02/13(水) 16:30:31ID:???
(OO)P

マスコット(笑)

名前はオッピー君。
育ち盛りのオスです。
パスタは嫌いだよ!

最近、俺俺オブジェクト指向にはまって
同僚達から嫌われる羽目にw

そんな落ち目のオッピー君と一緒にオブジェクト指向の真髄を極めよう!
381(OO)P 名前はオッピー君。
2008/02/13(水) 16:32:38ID:???
おいらに力を・・・・
382nobodyさん
2008/02/13(水) 20:00:42ID:???
どうして荒らしが粘着し始めたのだろう。
383nobodyさん
2008/02/13(水) 23:26:03ID:yj0olWG5
思い切って質問してみる。

テーブルAの操作をするクラスA、テーブルBの操作をするクラスBを作った。
両方のクラスで個別に接続するより、1番最初に接続して、その接続IDを使って処理させたほうがいいのかな?
384◆lKs5QMUHoA
2008/02/13(水) 23:56:35ID:???
>>383
取得するテーブルの数ごとに別々に接続はしない方がいいよ。
DBの処理負荷が大きくなるから。

私だったら、テーブルごとにクラスを分けたりはしないかな。
テーブルの構成そのものを隠蔽するために。
検索と更新は同じフォーム上では行わない前提にして、こんな感じにするかな。

// 接続に関するクラス
// PostgreSQLに接続する為のメンバとメソッドを持つ。
class CDB_PostgreSQL

// MySQLに接続するためのメンバとメソッドを持つ。
class CDB_MySQL

// 個人情報の検索をするクラス。
// 以下の検索メソッドを持つ
// ・電話番号を指定し、候補の個人情報一覧を得る。
// ・苗字を指定し、候補の個人情報一覧を得る。
// このクラスのメンバに上記2つのどちらかのDBクラスを持たせる。
class CSearch_Personal

// 個人情報の更新をするクラス。
// 以下の更新メソッドを持つ
// ・主キーを指定し、個人情報を更新する。
// ・新しい主キーを設定し、個人情報を新規追加する。
// このクラスのメンバに上記2つのどちらかのDBクラスを持たせる。
class CUpdate_Personal
385383
2008/02/14(木) 00:16:52ID:nkc61sHT
コードまで丁寧にありがとう。

クラス設計は、慣れがないと難しいね……。

> このクラスのメンバに上記2つのどちらかのDBクラスを持たせる。
申し訳ないんだけど、「メンバにクラスを持たせる」の意味が理解できない。
少し補足してもらえるとありがたいんだけど、ダメかな?
386nobodyさん
2008/02/14(木) 03:29:07ID:???
規模と言うか、どれだけ複雑なロジックがあるかだよね。2ちゃんねるは物凄く規模が大きいけど、ロジックはごく単純。ただの掲示板だもん。
387nobodyさん
2008/02/14(木) 03:30:36ID:???
テーブルAを操作するモデルクラスAとは行かない場合もあるよ。リレーションがある場合。
388nobodyさん
2008/02/14(木) 05:53:07ID:???
テーブルクラスはDBクラスと分けて
テーブルの中からgetConnection()するのが普通だよ
コネクション管理とテーブルを切り離す
389◆lKs5QMUHoA
2008/02/14(木) 08:04:05ID:???
>>385
設計の仕方は、その人が作ろうとするアプリ次第なので、その人が
やりやすいスタイルでやっていいと思うよ。
OOPの設計理論は、あくまで一般論なので、必要性を感じないのであれば、
必ずしも守らなくていいだろう。
私は、DBをPostgreSQLからMySQLへ変換する必要性も生じることを
想定した設計をしただけだよ。
こうやっておけば、書き換えるコードも少なくて済む。

class CSearch_Personal{
// DBを格納する
var $m_db;

// コンストラクタ
function CSearch_Personal(){
$db_info = ""; // ここでDB接続に必要な情報を入れる。
$this->m_db = new CDB_PostgreSQL($db_info);
}

// 電話番号で検索
function Search_by_TEL($tel){
$sql_str = "SELECT * FROM TableA WHERE TEL = '" . $tel . "'";
$this->m_db->Execute($sql_str);
// ここで、データをうけとり、返す。
}
}
390◆lKs5QMUHoA
2008/02/14(木) 08:07:28ID:???
どうしてもテーブル単位でクラスを作る場合は、こんな感じになるのかな。

// PostgreSQLへ接続処理などを管理する基底クラス(抽象)
class CDB_PostgreSQL_Connection

// TableAの操作を管理するクラス。
class CDB_TableA extend CDB_PostgreSQL_Connection

// TableBの操作を管理するクラス。
class CDB_TableB extend CDB_PostgreSQL_Connection
391◆lKs5QMUHoA
2008/02/14(木) 08:26:42ID:???
OOPの設計をする場合は、処理を文章で書き表して、
その中から名詞や役割を抽出していけばいいと聞いたことがある。
その単位を1つのオブジェクトとして設計する。
1つのオブジェクトを、1つのクラスとしてコーディングする。
392nobodyさん
2008/02/14(木) 08:57:14ID:???
>>390
CDB_PostgreSQL_Connectionを拡張してCDB_TableAにするのはまずい
子クラスと親クラスはis_a関係にしないといけない
言い換えると子クラスは親クラスの範疇に含まれていないといけない
テーブルがコネクションの一部でないことは明らか
393nobodyさん
2008/02/14(木) 10:58:27ID:???
異論はあるだろうけど、SQLに関しては、パフォーマンスの都合上実装の仕方が限定されるから、
モデルに合わせて考えるのではなくて、SQLを考えてから、それに会うモデル(クラス構造)を考えた
方が良いと思う。
394nobodyさん
2008/02/14(木) 11:05:10ID:???
>>393
kwsk
395nobodyさん
2008/02/14(木) 11:09:12ID:???
具体的に聞かれないと、答えようがない。
396nobodyさん
2008/02/14(木) 11:30:06ID:???
>>393
テーブル構造が複雑な場合、そういうのもアリだと思うけど
それはオブジェクト指向じゃないよね
397nobodyさん
2008/02/14(木) 12:00:13ID:???
微妙だけど、抽象化のレベルが低い(計算機寄りな)だけで、OOではあると思ってる。

ただDBアクセスについて、パフォーマンスを保ったまま、高い抽象化ができない・やりにくい
というのは、OOが本質的にDB向きではないということだと考えてる。
398nobodyさん
2008/02/14(木) 12:33:45ID:???
とりあえずDBアクセスはPDOでいい。
各操作系に保持させるならプリペアドステートメントを。

個人的には各テーブルってよりも各テーブルのレコードクラスを作るかなー。
テーブルに対する操作は静的メソッドで実装する。

どうでもいいがクラスってのは抽象データ型なので関数と比べるなんてしてるとハマる。
399nobodyさん
2008/02/14(木) 12:59:49ID:???
UMLモデリングツールでPHP書いている人いる?
具体的には「Umbrello」を業務で使っている人
400nobodyさん
2008/02/14(木) 13:18:17ID:???
C#の記事だけど、継承に関するものをみつけた。
Column - 継承を使うべき場合、使うべきではない場合 -
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_004/cs2_004_03.html#cs0406
401nobodyさん
2008/02/14(木) 14:54:28ID:???
>>397
> というのは、OOが本質的にDB向きではないということだと考えてる。
逆逆、リレーショナルデータベースが、OO向きじゃない。
402nobodyさん
2008/02/14(木) 15:00:26ID:???
>>398
> 各操作系に保持させるならプリペアドステートメントを。
プリペアドステートメントは条件の数を変えにくいという
大きな欠点があるからなぁ。

> 個人的には各テーブルってよりも各テーブルのレコードクラスを作るかなー。
一般に言われている、ActiveRecordパターンですね。
Ruby on RailsやCakePHPで採用されている奴です。
403nobodyさん
2008/02/14(木) 15:08:57ID:???
>>383
> テーブルAの操作をするクラスA、テーブルBの操作をするクラスBを作った。
> 両方のクラスで個別に接続するより、1番最初に接続して、その接続IDを使って処理させたほうがいいのかな?

処理の負荷というより、決定的な問題がある。

それは主にトランザクションを使ったときに起こる。

複数のテーブルを操作することで、一つの処理を完成させる場合
中途半端な状態を他に見せないようにしなければいけないし、
また一つのテーブルで処理が失敗した場合すべてを元に戻さなければならない。

これを実現する為に同じ接続から見える状態と、違う接続からみえる状態で
違うことがある。
404nobodyさん
2008/02/14(木) 15:18:21ID:???
PHPやWebアプリに限らないけど、OOPってのはフレームワークを作るためにある。
ここで言うフレームワークには、汎用の名前があるフレームワークだけじゃなく
たとえばあるゲームの独自の基本システムなんていったものも含む。

このフレームワークを使って作るもの・・・すなわち、
フレームワークから呼び出されるコードは、単純な処理になるので
(というか単純な処理ですむ為のフレームワーク)
OOPにならないことが多い。

だからといって、システム全体がOOPになっていないとは思わないけどね。
システム全体の一部。つまりクラスの中のメソッドだけを見て
非OOPというのはおかしいでしょ?
405nobodyさん
2008/02/14(木) 15:30:26ID:???
>>404
誰に言ってるの??
406nobodyさん
2008/02/14(木) 15:35:44ID:???
誰に言ってるのかも気になるが、そんなこと誰が言ってるのかも気になる。
OOPがフレームワークのためにあるという主張は初めて聞いた。
407nobodyさん
2008/02/14(木) 15:36:31ID:???
>>384>>389>>390 も気持ち悪すぎだ
普通に考えるとこういう感じだろう?

// 接続に関する抽象クラス。汎用で使える関数があれば定義しても良い。
class CDB_Connection {}

// PostgreSQL接続用クラスの実装
class CDB_PostgreSQL extends CDB_Connection {}

// MySQL接続用クラスの実装
class CDB_MySQL extends CDB_Connection {}

// テーブルに関する抽象クラス。汎用で使える関数があれば定義しても良い。
class CTable {}

// 個人情報クラス。
class CPersonal extends CTable{
 function CSearch($connection) {} //コンストラクタかメソッドでコネクションと接続
 function search() {}
 function update() {}
}
408nobodyさん
2008/02/14(木) 15:41:23ID:???
>>407
概ね同じ意見だけど、Cpersonalを実体化する必要ってあんまりなさそうだから、
自分はメソッドを staticにすることが多い。

あと、connection をオブジェクト内部にもってしまうと、そのオブジェクトはいつでも
SQLを実行できてしまうので、引数で渡すようにしてる。
(まぁ、staticにしたら引数で渡すしかないけど)
409nobodyさん
2008/02/14(木) 15:45:33ID:???
>>408 に補足
必要性がないというより、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を一切修正しないですむ。
411nobodyさん
2008/02/14(木) 15:49:17ID:???
>>404は、「バージョン6までのVBって構文は構造化だけど、
内部的にはクラスが動いているんだよ」といってるのと
同じ意味のように思える。
誰に何を伝えたいのかは良く分からないが。
412nobodyさん
2008/02/14(木) 15:51:40ID:???
>>408-409

まあ、そこは設計しだいでいくつかやり方があるけど、
ActiveRecordパターンの場合、インスタンスはテーブルを作るという意味ではなく、
クラスがテーブル全体で、そのインスタンスはテーブルのレコードという扱いになる。
そしてフィールドがプロパティ。

413nobodyさん
2008/02/14(木) 15:53:27ID:???
>>411
一応突っ込み。VBにはクラスがある。(少なくとも5以上)
もちろんnewでインスタンスも生成できる。
414nobodyさん
2008/02/14(木) 16:01:23ID:???
>>412
これですかね。
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で参照するという・・・
まあ見たほうが早い(?)
416nobodyさん
2008/02/14(木) 16:13:08ID:???
>>415
>なんで「そのオブジェクトはいつでも SQLを実行できてしまう」のが悪いのかわからないけど、

DBなんて巨大なグローバル変数の固まりみたいなものだし、アクセスもメモリと比べて遅いし、
トランザクションの都合からもある範囲でDBアクセスしている可能性がないかが
簡単に見分けられないのは怖いと思うけど。
417412
2008/02/14(木) 16:13:24ID:???
>>414
> なら、searchメソッドは、staticなり外部に置くのではないかと思う。
あー。staticでいいです。単に個人的な環境の理由から
PHP4を使っていて忘れていただけです。
418412
2008/02/14(木) 16:17:15ID:???
>>416
でもどっちみちデータベースに操作を出来るところなら、
コネクション知っているわけで、結局同じことでしょ?

それにクラスの変数はグローバル変数じゃないからw
419nobodyさん
2008/02/14(木) 16:33:55ID:???
>>418
必要なメソッドにしか connection を渡さず、オブジェクト内に保存しないことで、
「データベースに操作できるところ」を限定するという話。

connection をDBアクセスする権限と見るならば、その権限は処理に対して与えるべきで、
オブジェクトに対して与えるべきではないだろうということ。
420nobodyさん
2008/02/14(木) 17:56:06ID:???
DB周りはZendFrameworkの実装でなんら不満ないなあ。

421412
2008/02/14(木) 18:14:31ID:???
>>419
しかし、テーブルに関するクラスでデータベースを操作しないメソッドって
あまりないからなぁ。まあ別にいいけどね。
422nobodyさん
2008/02/14(木) 18:51:49ID:???
>>421
例えば Personテーブルに depart_codeがあるとして、$person->getDepartName() としたときに、
暗黙のうちにdepart_codeをキーとしてDepartテーブルから検索する SQLが実行されたら嫌だし、
setPersonNameされたときに、そのタイミングでupdateが実行されていないか疑わなきゃいけないのも嫌。
423nobodyさん
2008/02/14(木) 19:13:43ID:???
>>422
メソッドの実装がどうなってようが呼んだ方の知ったこっちゃないだろ。
そのどっちの例もそのクラスの仕様なんだから。
それを外側から知ろうとか制御しようだなんておかしな話だ。
424nobodyさん
2008/02/14(木) 19:41:54ID:???
そもそもstaticも存在しないPHP4で機能をまとめたようなクラス(CDB_PostgreSQLクラスみたいなの)
を作ろうとしてるのが気持ち悪い。

しかもOOPなんてデータベースの各要素に関数をくっつけたようなもんなんだから既存のデータを単体でしか扱わない
データベースと相性が悪いのは分かりきったことだろう。
425nobodyさん
2008/02/14(木) 19:54:36ID:???
OOPはデータベースの各要素に関数をくっつけたようなもの?
既存のデータベースはデータを単体でしか扱わない?
だからOOPとデータベースと相性が悪い?

( ゚Д゚) ワカラナイ
426412
2008/02/14(木) 20:04:12ID:???
>>424
staticはあくまでstaticだよと明示しているだけで
本質的には必要なものとは思えないけど。便利だけどね。

それと、CDB_PostgreSQLは「機能をまとめたクラス」ではないよ。
たとえば一つのアプリでサーバー負荷分散などで、
複数の接続を使用するときとか、複数のインスタンスが出来る。
427nobodyさん
2008/02/15(金) 07:09:54ID:???
PHPでもメンバポインタとかつかえれば
インスタンスに縛られない柔軟な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プロシージャ)で
> 作成したステートレスな設計にすることをお勧めする。
429nobodyさん
2008/02/15(金) 20:19:56ID:???
たまに昔のサイト触ったりすると非OOPなんてもうやってらんねーと思う
DRYになってないから直すの大変
430nobodyさん
2008/02/15(金) 22:23:07ID:???
OOPってのは設計的な考え方ってのが含まれるんだけど、
そういう考え方は別として、単にコーディング技法として便利だよ。
431nobodyさん
2008/02/15(金) 22:36:39ID:???
>>272
プリミティブだけど実装してみました・・
もはやQuickFormとSmartyがないと動きませんが・・
http://briefcase.yahoo.co.jp/bc/oopfw
432◆lKs5QMUHoA
2008/02/15(金) 23:49:43ID:???
風邪をひいてしまい、最近頭が回らないです。レスも遅れてしまってます。。。

>>392
確かにそうですね。継承をして作ったクラスはすべてPostgreSQLに依存してしまいます
ので、is-a関係が正しいですね。

>>407
接続に関して抽象的にクラスを定義するところは勉強になりました。
私はまだまだ継承を使いこなせてないですね。

>>410
> 接続オブジェクト(CDB_PostgreSQL)はCSearch_Personalクラス外部から与える。
この発想は思いつきませんでした。
確かに言われてみるとそうです。CSearch_Personalを一切修正しないで済むようになります。
433◆lKs5QMUHoA
2008/02/15(金) 23:50:26ID:???
>>431
サンプルありがとうございます。
あとでソースを読んでみます。
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で制御するスタイルでやってたな。
436nobodyさん
2008/02/16(土) 12:59:37ID:???
Accessではグリッドが無いけれど、サブフォームで代用する方法はある。
しかし、そのカスタマイズ度は低い。(確か、クリックしたセルの場所を
取るとか、一つのセルだけ色を変更するとかがかなり苦手だったような。)
サブフォームで代用できない場合は、フォーム上にグリッドを貼り付けるような
モジュールは無いので、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オブジェクト格納変数を渡す
}
438438
2008/02/16(土) 17:21:28ID:???
スクリプト先頭で、DBConnectをnewして、PDO格納オブジェクトを受け取ってから、
それを引数にCtrlAをnewする感じ……。
一応動きはするけど……全然ダメだな……。
439nobodyさん
2008/02/16(土) 17:46:45ID:???
>>438
なんでもいいけど、既存のフレームワークがどうなっているか見てみろ。

見たら自分で作るきなくなるけどなw
440438
2008/02/17(日) 16:53:21ID:???
>>439
返信ありがとう。

まったくわかってないみたいなので、クラスの設計方法から学び直します。

実際の処理をする具象クラスを作って、また別に、それを統括するクラスを作っていく。
複数のクラスを設定によって使い分けしなきゃいけない場合は、抽象クラスなりインターフェイスなりを継承(後者の場合は実装)させて、
メソッド名を統一させた上で、ポリモーフィズム――クラスによって同名メソッドの振る舞いを変えさせるって解釈でいいよね?――で実現させる。
基本こんな感じかな?

プリペアドステートメントに惹かれて、PDOを継承する形で作って見たんだけど、
DB接続関連の場合、接続IDを返してくるmysql_connect(); なんかのほうが、使いやすい気がする。

フレームワーク自作なんて、自分にとってはとんでもない話しですよ……。
441nobodyさん
2008/02/17(日) 19:14:54ID:???
お前の下らない御託はいいから見ろっつの
442nobodyさん
2008/02/17(日) 20:01:12ID:???
>>441
ごめん、無視してたわけじゃないんだ。
とりあえず、軽い「ちいたん」とやらを見てきます。

スレ汚し、ごめんなさい。自重します。
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します。
度重なるスレ汚し、失礼しました。
4471 ◆SWtzLesEmM
2008/02/17(日) 23:11:41ID:???
>>324
>>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
452nobodyさん
2008/02/22(金) 11:21:05ID:???
>>451
そのくらい自分で探せよという意味なのですが
453nobodyさん
2008/02/22(金) 11:36:33ID:???
>>451
自分でDBの抽象化を考えてみて、クラスの定義だけでも書いてみろ。
その後にZFのZend_DBを見て、自分のとどう違うか、なぜそうなっているのかを考えろ。

それから、偉そうな態度で教えてもらおうと思うな。

454nobodyさん
2008/02/22(金) 11:50:38ID:???
別に偉そうじゃないだろ。
むしろお前のほうが偉そうだ。
何被害妄想してるんだw
455nobodyさん
2008/02/22(金) 12:50:26ID:???
本気でOOP勉強したい人はまずPHP止めないと・・
PHPの世界にOOPの参考になるものがどれほどある?
javaやらずOOP出来ましたってありえないでしょ。
456nobodyさん
2008/02/22(金) 12:58:24ID:???
>>455
OOP勉強するなら、SmallTalkだな。
Javaとかアフォ?w
457nobodyさん
2008/02/22(金) 13:04:24ID:???
本気でOOP勉強する為にPHPをやめる必要は無い。
PHP使いながら、OOP勉強すればいいだけ。

本気でOOP勉強をするなら、非実用的な言語も含めていろいろな
言語を使うことになる。そしてそれらが実用的かというと別の問題。

いくらsmalltalkでOOPをマスターしました!とかいっても
それでウェブサービスを作ることはまずありえないんだから

手段と目的を逆にしないようにね。
458nobodyさん
2008/02/22(金) 13:04:45ID:???
その論争は、きりが無いから、マ板とかのOOPのスレでやって欲しい。
「スクリプトの世界ならRubyだろ。」とか、結論が見えてこないし、
このスレの趣旨とは違うと思う。
459nobodyさん
2008/02/22(金) 13:06:38ID:???
>>457は非常にすばらしいことを言ったと思う。
460nobodyさん
2008/02/22(金) 13:13:27ID:???
確かにPHPでOOPの解説をしている情報は非常に少ないので、
勉強の際はjavaやC#などの情報を読みながらやることになると思う。
しかし、PHPを辞めるまでする必要性は無いと思う。
言いたいのは「OOPの勉強するのなら、PHPに限定してはいけないよ。」
じゃないの?
461nobodyさん
2008/02/22(金) 13:16:21ID:???
本気で勉強する為にPHPをやめた。
そしてOOPをマスターした。

しかし、Javaでは共有サーバーで動くソフトを作れなかった。
多くのオープンソースアプリはPHP製だった。

OOPをマスターしたが、何も出来なくなった。 完。
462nobodyさん
2008/02/22(金) 13:27:17ID:???
前から思ってたんだが、頭の悪い人間が粘着してるな。
自分がどんな風に思われてるかも分かってないんだろうな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
464nobodyさん
2008/02/22(金) 14:19:47ID:???
PHPでOOPする為に別の言語でOOPの勉強をする。
自分の為に必要だからやるだけ。
465nobodyさん
2008/02/22(金) 14:42:14ID:???
>>463
うん。だからさ勉強・研究の為の言語と
実用・開発の為の言語は別なの。
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でシームレスにトレースできるようになる
467nobodyさん
2008/02/23(土) 08:39:50ID:???
>>447
サンプル見たけど
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>';
}

なんでダブルクォートやねん
469nobodyさん
2008/02/23(土) 09:12:10ID:???
>>447

class View_Baseは
helper的な役割だからいいとしても

View_List
View_WriteFinish

コントローラで判断させるべき機能が
Viewで書かれてるし
テンプレート化されてないのもあって
ぐちゃぐちゃですね。
ここがOOP構造を理解しにくい作りになってる

コントローラは面倒でもOOP理解するには必要だ
理解しやすくするためにテンプレート化も必要
470nobodyさん
2008/02/23(土) 09:19:29ID:???
>>447
本来コントローラとModelがやりとりする部分が
コントローラが無いために
Viewで処理されてる

MVモデルですね!
OOP構造化理解のためには
面倒でもMVCモデルじゃないと
初心者を間違った方向に導きますよ!!

471nobodyさん
2008/02/23(土) 12:22:21ID:???
>>469
具体的にどうすればいいの?
条件分岐してないから切り分けは良さげに見えたんだが。
viewは機能ごとの静的HTML吐くのとは違うの?
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は書き方がやたらめんどいぜ
473nobodyさん
2008/02/23(土) 13:56:50ID:i4AYcehM
コントローラがリクエスト解析

そのリクエストにおいて必要なモデルのインスタンス生成

モデルのメソッド呼び出す

選択したビューの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とかの技術で
非同期的にバックグラウンドで行うことにより、見た目上はサーバーから
変更通知がくるような感じに出来るんでしょ?やったこと無いけど。
その通知を元に、画面の一部、もしくはすべてを再描画する。



あとは詳しい人に任せた。
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とかの資料ググってくるは
478nobodyさん
2008/02/23(土) 17:50:55ID:???
そういう場合Comet使うんじゃね?
Cometすげえ!って大騒ぎになってたころ資料見ても俺には何がなんだか理解できなかったけど
479nobodyさん
2008/02/23(土) 20:15:50ID:???
1を含めてコントローラの役割が全然わかってないんだよ!
MVモデルになってるんだよ!
CakePHP、symfonyのソースをよく解読してみろよ!
1のサンプルにはVIEWにコントローラで処理するコードかいてあるんだぜ!
480nobodyさん
2008/02/23(土) 20:21:31ID:???
PHPでOOPを追求すると
結局はMVCモデルのフレームワークにテーマが行き着くんだよね
だったらPHPフレームワークのスレと同じじゃんて感じで
ここでOOPを議論するときは
MVCモデル以外を議論の対象にしたいよ
481nobodyさん
2008/02/23(土) 20:27:22ID:???
>>478
ワロタ。目からうろこw
httpってのはクライアント(ブラウザ側)から聞くことしかできないんだ。
どうやってもサーバーから話しかけることはできない。

だから、たとえば一分おきに、
「データ変わったかい?」「変わってねーよ」
「データ変わったかい?」「変わってねーよ」
「データ変わったかい?」「変わってねーよ」
「データ変わったかい?」「変わってねーよ」
「データ変わったかい?」「変わったよ!」

って聞かないといけない。たとえ4分半の時点でデータが変わっていても
5分後に聞くまでわからない。Cometというのは、
「データ変わったかい?」・・・・・・・・・・・(4分30秒後)「変わったよ!」・・・(数分後)「また変わったよ!」
とこうなる。

本質的にはクライアントから聞いているわけだが、変更があるまで
みのもんたみたいにずっと溜めてから返答するため、
負荷の軽減とリアルタイムな通知が実現できるというわけ。

しかし、いまさらだけどhttpで無茶やりすぎだw
482nobodyさん
2008/02/23(土) 20:30:12ID:???
例え巧すぎワロタ
483nobodyさん
2008/02/23(土) 20:32:35ID:???
>>479
だから具体的にどこがだよ?
484nobodyさん
2008/02/23(土) 20:35:35ID:???
>>480
> PHPでOOPを追求すると
> 結局はMVCモデルのフレームワークにテーマが行き着くんだよね

それはPHPに限らず。

そもそもOOPが一番よく使われるのは、フレームワーク部分なんだよ。
OOPはフレームワークを作るときに使うものといっても過言じゃない。

通常のビジネスロジック部分は基本的に単純な命令の集まりになるので
OOPを使っているという感じは無くなる。
485nobodyさん
2008/02/23(土) 20:43:56ID:???
>>484
だから結局フレームワークの議論になるんなら
このスレの意味が無いんだよ
486nobodyさん
2008/02/23(土) 20:45:46ID:???
>>483
>>469
487nobodyさん
2008/02/23(土) 20:49:01ID:???
>>485
フレームワークスレは、フレームワークの比較などを話すスレ
OOPはフレームワークを題材に、OOPの話をするスレ

おk?
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();
}
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>";
}
}
この中のどこがコントローラで判断させるべき処理なんだ?
490nobodyさん
2008/02/23(土) 20:57:01ID:???
>>487
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;
}
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;
}

変数名の最後に数字使うのは初心者だろ?
もしコード拡張で数値計算が入ったら紛らわしい
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入れないの?
494nobodyさん
2008/02/23(土) 21:47:30ID:???
$line2 = 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;
}
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;
}
497nobodyさん
2008/02/23(土) 22:04:10ID:???
else{
$ans = "";
}

これ全部

$ans = null;
に初期化に変えて
elseとっぱらった方がいいよ

返り値はオブジェクトが入ってるか入ってないかという処理なのに
空文字を返すのよくないよ!
498nobodyさん
2008/02/23(土) 22:44:30ID:???
まぁ空文字もnullも演算子によっては同様にfalse扱いできるという点がPHPの特徴なわけで
499nobodyさん
2008/02/24(日) 05:50:47ID:???
>>490
> じゃあperlでOOP、rubyでOOPていうスレが無いのは何でなんだ?
人気が無い言語だからw
500nobodyさん
2008/02/24(日) 11:09:06ID:???
プログラム初心者がPHPだけでOOPを習得するのはほぼ不可能に近いと思う。
OOP習得が目的ならあまりにも無謀だし、全くもって得策ではない。

フレームワークとか利用しても、ユーザが$_POSTとか直接呼べちゃうと
結局OOPの意味が無いんではないだろうか?むしろそれが出来てしまうPHPは
OOP理解には全く向いていない言語だとも思うのだ。

でも不完全ながら、PHPでOOPっぽくコーディングすること自体は楽しいと思う。
501nobodyさん
2008/02/24(日) 11:31:24ID:???
>>500
> プログラム初心者が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を前提として作られた言語じゃないからね
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開発者からのメッセージと理解すべき。
508nobodyさん
2008/02/24(日) 15:44:11ID:???
グローバル変数が使えたら、カプセル化できない言語ってことになるのか。
そりゃすごい。
509nobodyさん
2008/02/24(日) 16:03:09ID:???
俺も、>>469に書いてる、コントローラで判断させるべき処理の具体的な
コードを教えて欲しい。
このコードの話が質問されても出ていないのはなぜ?フレームワークを
使わないと、理論を完全に実現できないとかそういう話だから?
510nobodyさん
2008/02/24(日) 16:19:48ID:???
>>479=486も結局答えられてないしな。
だめだだめだと言うものの、何故だめなのか、どう書けばいいのかということには答えられない低レベル批判厨なのさ
511nobodyさん
2008/02/24(日) 19:08:42ID:???
また見えなくすることをカプセル化と勘違いしてる高レベルプログラマさんのお出ましだ
5121 ◆SWtzLesEmM
2008/02/24(日) 19:49:37ID:???
>>1 ◆SWtzLesEmM :2007/02/23(金) 13:35:52

このスレも1周年を迎えてましたね!
…時間が経つのは早いなー。><

1年前からあまり進歩してないのは気のせい?(・∀・)
5131 ◆SWtzLesEmM
2008/02/24(日) 19:50:55ID:???
>>487
PHPでOOPを勉強するとき、フレームワークは良い見本になりますね!

>>490
>PHPにこだわる理由がわからない
ホームページ作成でPHPの勉強を始めました。
プログラミングの勉強をしていたら、手続き型以外にOOPという方法があることを知り、使えるようになりたいと思いました。

>>502
Zendが積極的に音頭を取って、初心者向けの情報提供をやってくれたらいいですね。><
http://www.zend.co.jp/tech/
Zendの代わりに、PHPプロというサイトがPHP初心者のニーズをカバーしてくれているでしょうか?(・∀・)
http://www.phppro.jp/

>>503
Javaもちょっと勉強してみました。^^
…今使っているレンタルサーバだとJavaが動かない><

>>507
自分で作ったクラスに関しては、クラス内に変数を封じ込めておけるので、スコープ(変数が操作できる領域)をコントロールできるのではないでしょうか?
PHPが最初から用意してくれているグローバル変数($_REQUES等T)のデメリットがよく分からないのですが、いつでもアクセスできるのでこれはこれで便利だと思います。

とりあえず、PHPでOOPが使えるようになりたいです。
PHP以外の言語も使ってみて、必要に応じて使い分けができるようになれればイイですね!(´∀`)
5141 ◆SWtzLesEmM
2008/02/24(日) 20:01:23ID:???
フレームワークに関して情報提供どうもありがとうございます。

>>479
MVモデル…(ノ∀`) アチャー
以前作った掲示板を、MVCフレームワークの形で作り直してみました。(^^)v

http://ssurl.net/ryol
515nobodyさん
2008/02/24(日) 20:34:16ID:???
結局1のやりたいことは
アマゾンのアフィリエイトの誘導らしいwww
5161 ◆SWtzLesEmM
2008/02/24(日) 22:49:51ID:???
>>515
PukiWikiPlusでamazonプラグインをデフォルトのまま使うと、プラグイン作者さん?のアフィリエイトコードが付くようですね。><
http://cafelounge.net/dev/?PukiWiki%20Plus!%2FPlng-in%20Customize#a5aa9e2a
>amazonアカウントを設定します。
>define('AMAZON_AID','mikoscafeterr-22');

アフィリエイトはやってませんが、とりあえず本の情報をまとめるのに便利なのでamazonプラグインを使ってみます。^^
517nobodyさん
2008/02/25(月) 07:27:51ID:???
>>516
本の情報とかいらんよ
あと、valueclickのアフィリエイトも出てるし
あとTOPページいくとgoogle広告も出てる
結局こういうことかいな
最悪やなお前
518nobodyさん
2008/02/25(月) 11:09:54ID:???
具体的な本の紹介をサイトに掲載することは俺は賛成だけどな。
でも、単に羅列してるだけよりも、読んでみてどう思ったのかという
レビューをだして、その人なりの評価を出して欲しいとは思った。
羅列しているだけだと、そのサイト特有の色を感じない。
519nobodyさん
2008/02/25(月) 11:36:58ID:???
どう考えても本の紹介を書くのおかしいだろう?
ここだけじゃないけど
技術的なサイトに広告とかマジうざい!!!!



520nobodyさん
2008/02/25(月) 11:41:53ID:???
「OOPやるのならば、PHPを辞めた方がいい」といっている人は、
それをいいたいのならば、もっと具体的に言って欲しい。
「RubyはもともとOOPとして設計されている」とか抽象論で終わってるから
何も話が進まず、同じことの繰り返しが続いているんだと思う。
「$_POSTなど、グローバル変数があるからオブジェクト指向的な考えには
ならない」とかそういう話をしてもらえれば、勉強する人はそれを
それぞれに解釈して学んでいけるのではと思う。
「じゃ、辞めようか」と思う人もいれば、「じゃ、その部分だけ気を
つけていけばPHPでもOOPがやれるんだな」と思う人もいるわけで。
521nobodyさん
2008/02/25(月) 11:44:37ID:???
1は誤解を招くことは面倒だからやめた方がいいよ

522nobodyさん
2008/02/25(月) 11:44:58ID:???
>>519
そこまでいいきるのなら、じゃ、みなけりゃいいじゃんとか思うけどな。

あからさまなCMじゃなければいいと思うけどな。俺はこの本をつかって
こういう勉強をして、こういう役に立ったとか、いいじゃん。
このスレは勉強しようっていうスレなんだから。
523nobodyさん
2008/02/25(月) 11:46:05ID:???
>>521
それにおいては俺も同意だな。
524nobodyさん
2008/02/25(月) 11:47:54ID:???
特に2ちゃんはスレ利用して
最終的に宣伝目的にするやつが多いからな
リンク先に広告があるかどうかだけはシビアに見てる奴が多いよ
525nobodyさん
2008/02/25(月) 11:51:48ID:???
100歩譲って本を紹介しても、それは構わないけど
それがアフィリエイトになってるのがおかしいよ
526nobodyさん
2008/02/25(月) 11:54:29ID:???
以前、面白いレスを自分のサイトに集めて、面白かったと思う
投稿も受け付けたりしていて、そのサイトに広告を出して儲けてた
人がいて、叩かれたことがあったからな。
あと、のまねこ。
そういう事件があったから、2ちゃんねるをつかって管理者が
儲けようとする目的で広告が掲載されていることにはぴりぴりと
している傾向はあると思うな。

2ちゃんねるを通じて何か企画をするのには賛成だけど、やるのなら
GPLライセンスでやるみたいな意識でやらないとだめなんじゃないかな。
527nobodyさん
2008/02/25(月) 11:59:06ID:???
書籍の紹介は良いと思う。そうしないと、@ITの紹介もだめになるわけで、
本当に内容の無いことしかかけなくなってしまう。
情報をまとめていることで、便利だというものもあるしね。
だけど、「アフィリエイトはダメだ」という意見には賛成だ。
528nobodyさん
2008/02/25(月) 12:02:29ID:???
1がアフィリエイトするのは構わないけど
2ちゃんを利用するというのが問題あり
529nobodyさん
2008/02/25(月) 12:06:47ID:???
2ちゃんねるのスレのまとめサイトであるにもかかわらず、
アフィリエイトされていると、それがどこかで告知されて、
大きく騒がれると思う。このスレに厨を沢山呼ぶことにも
なりかねない。
記念パピコとかが大量に来るので、1は早急にアフィリエイトは
辞めるべきだと思う。
530nobodyさん
2008/02/25(月) 12:07:12ID:???
嫌いだと思う事と否定すべき事は分けるものだと思うが、ここでのOOPの議論を見れば
それができないのも仕方がない。
531nobodyさん
2008/02/25(月) 12:08:30ID:???
>>530
kwsk
532nobodyさん
2008/02/25(月) 12:34:45ID:???
2ちゃん利用して金儲けはよくないし
まとめサイトで書籍紹介するのも始めてみて正直びびった
5331 ◆SWtzLesEmM
2008/02/25(月) 12:50:47ID:???
ご意見どうもありがとうございます。もう少しPHPでOOPの勉強を続けてみます。

>>517
2chでソースコードを投稿(>>36-50)したら、>>53さんが「わかりにくいからWebサイトにまとめてくれ。」とアドバイスしてくれました。
とりあえず、無料サーバ(XREA)にまとめサイトを設置しましたが、XREAは広告を表示するようになっているので仕方ないですね。
http://www.xrea.com/?action=ad
>当サイトは、無料運営のため、広告コードを自分で挿入する、または、自動的に挿入して頂く必要があります。

>>521
アドバイスどうもありがとうございます。
PukiWikiPlusのamazonプラグインに付いていたプラグイン作者さん?のアフィリエイトコードは外しました。

>>526
CGM型のサイトを運営して収益が出る場合、運営者だけが利益を得て、参加者に利益が還元されないと、不公平=不満に感じる人もいるかもしれませんね。
このまとめサイトは、ソースコード置き場+自分のメモという感じで使っていますが、利益が出せるでしょうか?

営利目的の企画として行なうなら、企業や出版社等に運営してもらった方が、本格的になっていいかもしれませんね。(^^;
…どこかで「PHPでOOP」講座を作ってもらえないでしょうか?>PHPプロさんとか?

>>527
勉強するとき、本を読む人っていますよね?
本は読まない人もいると思いますが、本の情報も調べたのでついでにまとめました。
534nobodyさん
2008/02/25(月) 12:58:27ID:???
1の目的がよくわらん。
1がコテハン使ってスレをリードするのおかしいやろ?
まとめサイトも1が作るのちゃうやろ
名無しがやることやろ
535nobodyさん
2008/02/25(月) 13:00:22ID:???
1がスレをリードせんといて
長くレスが続くなら
それは本当に需要のあるスレであって
1が作り上げたスレになってるやん
536nobodyさん
2008/02/25(月) 13:14:26ID:???
>>533
1(個人)に利益が出てたら、必ず騒ぐ人が出てくる。
しかし、利益が出てなければ、その旨を断っておけば、
騒いでいる意見は無視しておけば、しばらくすれば蒸発
すると思う。
537nobodyさん
2008/02/25(月) 13:18:05ID:???
>>534
俺は1ではないが。

> 1の目的がよくわらん。
スレタイの通り。PHPでOOPを勉強する。

> 1がコテハン使ってスレをリードするのおかしいやろ?
何がおかしいのかがわからん。
こうあるべきだとかいうガイドラインでもあるわけ?

> まとめサイトも1が作るのちゃうやろ
> 名無しがやることやろ
お前のローカルルールを押し付けるな。
1がまとめサイトやめたら変わりにお前がやるのか?
538nobodyさん
2008/02/25(月) 13:21:26ID:???
>>535
お前のやりたいことの方が分からん。
変な哲学押し付けるな。
539nobodyさん
2008/02/25(月) 13:27:10ID:???
スレ主がまとめサイト作ってるスレてあるの?
広告目的以外に見たことないんだけどwww
540nobodyさん
2008/02/25(月) 13:30:31ID:???
なんで事例が必要なの?
541nobodyさん
2008/02/25(月) 13:35:02ID:???
>>539
だったら君が利用しなきゃいいだけでは?
542nobodyさん
2008/02/25(月) 13:35:25ID:???
WebProg板で
スレ主がまとめサイト作ってるスレどこにあるんだよ?
543nobodyさん
2008/02/25(月) 13:36:07ID:???
2ちゃんにふさわしくない行動は見て見ぬふりは出来んよ
544nobodyさん
2008/02/25(月) 13:39:24ID:???
1は需要のないスレを無理に上げるのやめて欲しいよ
自分の存在を認められたいだけのオナニスレだよ
545nobodyさん
2008/02/25(月) 13:44:21ID:???
アフィリエイト見てオナニスレてことに確信がもてたよ
このスレは1の自己満足以外に何も生まれないよ結果としてね
546nobodyさん
2008/02/25(月) 13:45:42ID:nYfgU4lL
>>543-544
何で君はスルーができないの?
誰も書き込まなければそのまま消えていくんじゃないの?
547nobodyさん
2008/02/25(月) 13:46:57ID:???
コテハン使って自慢げにソースコード公開するやつは
よほど腕に自信がある奴か
初心者相手に自己満足したい奴かのどっちか
548nobodyさん
2008/02/25(月) 13:47:30ID:???
>>545
君の語りを見てオナニレスてことに確信がもてたよ
これらのレスは君の自己満足以外に何も生まれないよ結果としてね
549nobodyさん
2008/02/25(月) 13:49:30ID:???
>>547
ああ、そうか。だったら君はもう来るな。
550nobodyさん
2008/02/25(月) 13:52:02ID:???
1が名無しとなって言い訳してるくさいな
551nobodyさん
2008/02/25(月) 13:54:58ID:???
>>550
俺は1じゃないんだけどな。言い返せなくてそれしかいえないんだな。
それにお前がここに常駐する意味はないよな。
552nobodyさん
2008/02/25(月) 13:58:28ID:???
記念パピコ
553nobodyさん
2008/02/25(月) 14:52:48ID:???
コマツも軍需だよね
554nobodyさん
2008/02/25(月) 17:26:59ID:???
さ あ 、 も り あ が っ
                  て
                     ま
                       い
                         り
                          ま
                           し
                           た
555nobodyさん
2008/02/26(火) 10:28:32ID:???
1が書き込みしないと
恐ろしいほどさびれてんねw
1だけがPHPでOOPに興味があって
その興味を無理矢理に広めようとしてる
このスレの落胆ぶり見ればよくわかるwww
556nobodyさん
2008/02/26(火) 12:06:28ID:???
PHPにかぎらず、「オブジェクト指向」が一般化したと言っても、実際にはライブラリ(フレームワークを含む)が
クラス化されて、プログラマはそれを使ってるという程度の話でしかないから、OOPそのものの話が盛り
上がらないのは、当然といえば当然。
557nobodyさん
2008/02/26(火) 14:01:10ID:???
WebProgで勢いあるのなんてくだすれぐらいだろ
558nobodyさん
2008/02/27(水) 22:15:02ID:???
何度も1のこと前向きにとらえようとしたけど
やはり1が何をしたいのかよくわからん
559nobodyさん
2008/02/28(木) 00:08:29ID:???
OOPの勉強じゃないの?
560nobodyさん
2008/03/01(土) 01:04:42ID:???
自称非営利団体の運営を本業に転換する難しさのバーチャル体験学習。
乗せられたボランティアからの不満が噴出。
ありがち。そして解散。ありがち。
561nobodyさん
2008/03/02(日) 15:48:10ID:???
私も1が必死にスレ継続させてる意味が???
営利団体なら意味はわかりますが
562nobodyさん
2008/03/02(日) 16:50:51ID:???
このスレ1年以上在るのに、 1 ◆SWtzLesEmM が書き込んだことがある日数って 16日だよ。
必死どころか、やる気があるのかと言いたい。

2007
02/23 02/24 02/27 02/28 05/12
06/12 07/06 07/11 07/26

2008
01/29 02/02 02/06 02/10 02/17
02/24 02/25
563nobodyさん
2008/03/02(日) 20:21:37ID:???
暇人乙
564nobodyさん
2008/03/02(日) 23:43:21ID:???
まー、ここで勉強するな、とは言わないけど、本気でやろうと思ってる人は、まず自分で本買うなりして勉強すると思うよ。

別に興味ないやつはスルーでも何でもしときゃいいと思う。
565nobodyさん
2008/03/09(日) 10:19:09ID:???
>>562
1自演乙!
566nobodyさん
2008/03/10(月) 14:48:07ID:???
自演度は THE END
567nobodyさん
2008/03/17(月) 07:13:22ID:???
保守
568nobodyさん
2008/03/28(金) 02:04:42ID:???
このスレで、今日から貴方もOOP!!!\(^o^)/

>>1
オッパッピーの間違いですよね
569nobodyさん
2008/04/20(日) 09:34:37ID:???
保守
570nobodyさん
2008/05/24(土) 06:41:54ID:???
保守
571nobodyさん
2008/06/16(月) 13:47:07ID:???
難解も、難解も、オブジェクト指向
572nobodyさん
2008/06/17(火) 12:52:46ID:???
スレタイの主旨からずれるけど、
やはりC言語は、一度は学んでいた方が良いな。

Javaからプログラムに入ったから、PHPのOOPでアロー演算子使うのにとても違和感あったのだけど、
Cの構造体を知って、ドットシンタックスよりアロー演算子の方が正統派と思えるようになった。
573nobodyさん
2008/06/17(火) 13:01:04ID:???
どっと疲れる
574nobodyさん
2008/06/17(火) 16:56:31ID:???
どっと込む
575nobodyさん
2008/07/01(火) 00:56:40ID:???
>>573
>>574
バカアロー
576nobodyさん
2008/07/27(日) 23:15:55ID:???
諸事情により、Web系のプログラミングから離れていたけれど、
また時間がとれたら舞い戻ってきます。よろしくw
577nobodyさん
2008/08/09(土) 20:52:22ID:???
PHPに触る機会が・・・なんで、VBばっかりなんだ・・・
578nobodyさん
2008/08/19(火) 00:44:43ID:???
保守
579nobodyさん
2008/08/28(木) 21:10:25ID:???
保守
5801 ◆SWtzLesEmM
2008/09/02(火) 15:51:27ID:w90kCMMO
クラスの作り方(設計)について、考え方が参考になる本がありました。

http://www.amazon.co.jp/dp/4798110558/
モデルとプロセスをめぐる冒険

「モデリング」ということについて調べてみると、いろいろノウハウがあるようです。
581nobodyさん
2008/09/27(土) 22:23:48ID:???
保守
582nobodyさん
2008/10/06(月) 00:30:42ID:???
保守
583nobodyさん
2008/10/24(金) 23:26:54ID:???
保守
584yodobashi
2008/10/26(日) 01:15:24ID:???
大手ECサイトのヨドバシドットコムが、サイトリニューアルから大規模な障害を3日間...
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail.php?qid=1220150877

506 :目のつけ所が名無しさん:2008/10/26(日) 00:47:20
大手ECサイトで、ここまで派手なリリース失敗は初めて見た。
エンジニア向けIT情報誌や関連サイトは、ぜひ取材して原因を明かして欲し
いは。
585nobodyさん
2008/11/05(水) 20:43:48ID:???
保守
586nobodyさん
2008/11/13(木) 23:12:08ID:???
保守
587nobodyさん
2008/11/15(土) 09:19:30ID:???
定期的に保守してるの誰?
糞スレに対してその執念が怖いんだが。。。
588nobodyさん
2008/11/23(日) 22:46:31ID:???
お前の粘着質の方が怖い
589nobodyさん
2008/11/29(土) 11:22:40ID:???
PHP でオブジェクト指向の設計をするための 7 つの良い習慣を身につける
http://www.ibm.com/developerworks/jp/opensource/library/os-php-7oohabits/

PHP での適切な OO の習慣を身につけることによって、より安定していて、保守が容易で、拡張も容易にできるアプリケーションを作成することができます。そのためには、次のことを忘れないでください。

* 控え目である
* 良き隣人である
* メドゥーサを見ないようにする
* 結びつきを極力弱くする
* 結束性を高める
* 家族の一員として扱う
* パターンで考える

こうした習慣を身につけ、使いこなせるようになると、皆さんはきっとアプリケーションの品質が変わったことに驚くはずです。
590nobodyさん
2008/11/30(日) 22:51:36ID:???
内容は否定しないが、その書き方はどうかなと思うな。
英語の翻訳だからなのかな。
「メドゥーサを見ないようにする」なんて飛躍した比喩表現では
イメージつかないだろw
591nobodyさん
2008/11/30(日) 23:12:38ID:???
http://phpspot.org/blog/archives/2008/11/php_7_1.html
パクりblog乙
592nobodyさん
2008/12/01(月) 12:13:27ID:YUzphIUV
>>589
メデューサの項目でインタフェースを使う意義って何?
ファクトリーパターンの利点しか説明してないような気がするんだが
593nobodyさん
2008/12/02(火) 01:29:02ID:???
>>591
広告の方が多いってどうなんだよ
1:4で広告じゃねーか
594nobodyさん
2008/12/04(木) 18:30:24ID:???
DIコンテナとかどうなのか
595nobodyさん
2008/12/14(日) 06:43:35ID:???
オブジェクト指向のカンタンな例

<?php
class A
{
function foo()
{

echo 'hello <br>';


}
}



$a = new A();
$a->foo();

$b=new A();
$b->foo();



?>
596nobodyさん
2008/12/15(月) 02:03:44ID:???
簡易なMVCモデルのサンプルってないのかなぁ。
フレームワークを作るとか、フレームワークを使うとかじゃなくてさ。
考え方を学ぶためにみてみたいんだけど。
過去ログにあるように、つい、MVモデルになってしまうもんで。
597nobodyさん
2008/12/15(月) 03:35:20ID:???
巷に星の数ほどあるだろ
598nobodyさん
2008/12/15(月) 12:27:44ID:???
Googleで、

簡易なMVCモデル

と検索させる

http://www.google.com/search?client=safari&rls=ja-jp&q=簡易なMVCモデル&ie=UTF-8&oe=UTF-8

ドゾ...
599nobodyさん
2008/12/16(火) 10:49:27ID:???
結構前の話だけど、>>488-489へのレスってついてるのかな?
過去ログ読み直してみても、何処が批判されているのかが分からん。
Viewはこれでいいと思うのだが。
600nobodyさん
2008/12/16(火) 10:56:49ID:???
http://www.zend.co.jp/tech/index.php?cmd=read&page=%A5%B3%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0%BB%D8%BF%CB%2F%A3%B4%A1%A5MVC

ひょっとして、「Viewではhtml出力をしてはいけない」という考えを示している
ということなのか?
html出力は別のクラスに任せるべきで、Viewはそのクラスのインスタンスの生成
と実行までを行うべきだという視点で批判してるとか。
601nobodyさん
2008/12/16(火) 11:17:25ID:???
はい?批判ってどれ?
602nobodyさん
2008/12/16(火) 12:52:53ID:???
>>601
批判している書込みは>>479です。
「に」のサンプルが、(コーディングにかかわるルール以外で)
MVCの設計はこれで良いのかがあいまいなまま終わってる気がします。
603nobodyさん
2008/12/16(火) 13:03:16ID:???
気になってる批判は>>469もだな。そして>>471となっているが、そのレスが
無くておわってないかい?
604nobodyさん
2008/12/16(火) 19:38:24ID:???
よくわかんないんだけど、OOPとMVCって両立できるの?
605nobodyさん
2008/12/16(火) 19:50:24ID:???
MVCをOOPで実現するんだろw
606nobodyさん
2008/12/17(水) 01:23:14ID:???
これどうなの?

http://www13.plala.or.jp/naka_jima/php/chapter12.html
607nobodyさん
2008/12/17(水) 01:36:07ID:???
どうって何が?
608nobodyさん
2008/12/17(水) 03:42:22ID:???
MVCだと必ずフレームワークを使わなければならないわけでもないよね。ちがうの?
それとも、非常に単純なクラス構成でMVCを実現しようという考えが間違いとか?
609nobodyさん
2008/12/17(水) 04:51:02ID:???
別にいいんじゃ?
610nobodyさん
2008/12/17(水) 10:09:45ID:???
>>606見たんだけど、MVCってこんななの?
View や Model 1つに対して1ファイルみたいだけど、ファイル量半端ないことになりそう。
611nobodyさん
2008/12/17(水) 14:15:45ID:???
DBの形式や最終的な見せ方によって、ファイル数は変わるんじゃないの?

でも、MVCってわりとファイル多めだよな!

1ファイルのコード量、大して多くないけど
612nobodyさん
2008/12/17(水) 15:06:27ID:???
ファイルが多めなのが嫌なら1ファイル内に複数書けばいいじゃない
613nobodyさん
2008/12/17(水) 17:53:39ID:???
OOPそのものをやろうとするとクラスやファイル量が多くなるからね。
汎用性を考えて作ろうとするとなおさらだ。それはしかたがないのかも。

そこをあえて、フレームワークや外部のモジュールなどを使わずに
非常にクラス数を少なくしてやってみたいなと思うんだけどね。
MVCの理解の一環として。
614nobodyさん
2008/12/17(水) 20:20:24ID:???
やってみればいいのでは?
615nobodyさん
2008/12/18(木) 01:34:16ID:???
<?php
class Framework{
    // コントローラー
    public function controller(array $inp){
         $model = $this->model($this->di('Action', $this->di('Action_Mapper',$inp));
         $this->view($model);
    }
    // モデル
    protected function model(Action $actions){
        return $action->do();
    }
    // ビュー
    protected function view($model){
        print ($this->di('View_Helper', array($model));
    }
    // DIコンテナ
    protected function di($class, $options){
       return new  $class($options);
    }
}
class HelloWorld extends Frameworkd{}
App::controller($_GET);
616nobodyさん
2008/12/18(木) 01:36:48ID:???
なんじゃそりゃ
617nobodyさん
2008/12/18(木) 01:37:24ID:???
最後の一行間違い
618nobodyさん
2008/12/18(木) 08:21:41ID:???
せめてクラスは3つ以上にするべきだろ。
最低限といっても、ファイルを読み込んで表示とか、書き込みとかの処理まで
出来る機能を持ったほうがコントローラとビューの違いが明確に分かりやすく
なると思うんだけど。
619nobodyさん
2008/12/18(木) 10:48:40ID:???
これはMVCどこがやるのが妥当か?
ってところで迷う。
時々、曖昧なのが出てきちゃう。
620nobodyさん
2008/12/18(木) 11:48:41ID:???
>>619
ここで事例を通じて具体的な意見を交わしていけばどうかな?」

例えば・・・
掲示板
■コントローラ:処理の内容を判断するクラス
・プログラムが実行された時、一番最初に実行される
・POSTの値をみて、以下の処理にてどれに該当するかを判断する
 ・データを表示する
 ・データを書込む
 ・編集用のフォームを表示する

■ビュー:htmlのレイアウト表示を担当するクラス
・以下のメソッドを持つ
 ・データをhtmlで表示する
 ・データ編集用htmlを表記する

■モデル:データファイルを管理するクラス
・ファイルの読み込み、書込みをする
・外部とは1件分のデータはBBSLineクラスでやりとりする
621nobodyさん
2008/12/18(木) 12:24:15ID:???
>>620

『■コントローラ:処理の内容を判断するクラス 』の
>  ・データを表示する
>  ・データを書込む


『 ■モデル:データファイルを管理するクラス 』の
> ・ファイルの読み込み、書込みをする


って、意味が重複しているような感じがするのですが...


ならば、
■コントローラ:処理の内容を判断するクラス
  ・モデルからデータを受け取る
  ・モデルにデータを渡す

とかでは、おかしいですか?
622nobodyさん
2008/12/18(木) 12:52:00ID:???
>>621
>>620じゃないけど。
・データを表示する
・データを書込む
・編集用のフォームを表示する
実際に上記の作業をするのは View と Model だよ。Controllerがするわけじゃない。
コントローラーはどれがリクエストされたかを判断して、適切な Model と View を呼び出す。
623nobodyさん
2008/12/18(木) 16:39:54ID:???
>>469は具体的に何処のコードを批判しているのかが分からないので
どなたか解説を頼みます。
624nobodyさん
2008/12/18(木) 20:10:31ID:???
MVCモデルでM同士で連携することってあり?
それとも必ずC経由?

C経由の場合、Mをなるべく疎結合になるように細分化してると、
Cの各Actionに書くロジック量が半端なく多くなってくるんだよね。
(Aデータを取ってきてBデータを取ってきてBをCバリデータに通してAとBを基にDを作成して・・・みたいな)
一つのAction内にロジックが増えるのもどうかと思うし、それって新しいモデルじゃんという気もしてこないでもない。
625nobodyさん
2008/12/18(木) 20:23:33ID:???
>>624
俺はM同士で連携するかたちでも良いと思うけどね。
CからMを見た場合、あるまとまった処理単位でメソッドを呼び出す形であることが
重要だと思うから。
CがMを使うときは必ずメソッドA呼び出してメソッドB、メソッドCを実行しなければならない。
さらに、そういう3連呼び出しがCの中に何箇所か書かれているなんていうのは再利用性などが
悪くなると思うから。
626nobodyさん
2008/12/19(金) 16:35:55ID:???
試しに掲示板をMVCでやったら、なんかやっとそれっぽくなった。
627nobodyさん
2008/12/19(金) 19:23:16ID:???
>>626
うpきぼん
628nobodyさん
2008/12/20(土) 14:28:47ID:???
>624
変化する内部状態を持つモデル同士で連携させると見通しが悪くなる。
生成してから、(観察される)内部状態が変化しないようなモデルはどこから呼んでもそれほど大きな問題はない。
オブジェクトの生成期間中に(観察される)内部状態が変化するようなモデルは、C直轄にしといた方がいい。
629nobodyさん
2008/12/20(土) 14:34:18ID:???
生成期間→生存期間
なんか寝ぼけてた。

要は変化する「状態」を持っているもの全てはCの管理下に置いておいた方がいいってこった。
「状態」が無いもの(生成時にファイルからデータをロードしてそれっきり、とか)はどこにあったって構わない。
インスタンスの生成を行なうクラスは自分ルールでもいいからある程度絞っておかないと混乱すると思うけどな。
630nobodyさん
2008/12/20(土) 15:34:43ID:???
変な質問だけど、OOP での Validator ってのがよくわかんねえ。
is_numeric(); とかをModel内にべた書きしないで、Validatorオブジェクトを通じて、変数の内容を確認すればいいの?

$str = 'string';
$valid =& new Validator();
$valid->isStr($string);

みたいな感じで。
BaseValidator みたいな基本的なチェックをするクラスを作って、継承した先で複雑なチェック用のメソッドを実装させればいいのかな。
631630
2008/12/20(土) 15:37:54ID:???
引数間違えてる。最後の行。

$valid->isStr($str);

ね。まぁ、別に問題ないが。
632nobodyさん
2008/12/20(土) 15:54:47ID:???
問題はありまくりだろ
633nobodyさん
2008/12/20(土) 16:42:14ID:???
>630
http://gist.github.com/38261

俺はValidatorクラスはコントローラ単位で実装してる。「入力値の検証」なのだから、コントローラの責任。
Validatorだけ独立させるのはコードの見通しを良くするためであり、責任はあくまでコントローラにある。
ただ、実際にそっからコールするのはModelのメソッド。何が許可されるかを知ってるのはだいたいModelだからな。
たとえば受け付ける値が日付なら、そっから日付クラスのvalidateメソッドを呼び出す(MyDate::validate($string))。

POSTされる中に列挙型(<select>から送られるような、選択肢が限られているもの)とかがあった場合にこの構成は滅茶苦茶強い。
<select>のためのデータ生成とか、送られたvalueから画面表示用の文字列(「〜モード」とか)への変換を一箇所に集められる。
あと、文字列が決まったフォーマットになっているか調べる場合とかな。

is_strとかctype_stringとかstrlenだけで検証が終わるものはvalidatorクラス内に直書きする。
validateNumericとかvalidateStrとか書くよりその方が分かりやすい。
634nobodyさん
2008/12/20(土) 17:07:58ID:???
>>633
ものすごく丁寧にありがとう。
まだぼんやりとしかわからないけど、サンプルコードを読み解いて、いろいろ試してみる。
635nobodyさん
2008/12/20(土) 17:13:17ID:???
>>633

>「入力値の検証」なのだから、コントローラの責任。

「検証する」んじゃなく「検証させる」のが仕事じゃないの?
ここでいう入力値の検証って例えばどんなこと言ってる?

3行目で
>何が許可されるかを知ってるのはだいたいModelだからな。

って書いてるってことは、なにか、Modelに関係ないものを想定してると思うんだけど。
636nobodyさん
2008/12/20(土) 18:07:36ID:???
>635
大雑把に言うと、処理を始める前に可能なパラメータの検証全般。
純粋に入力値だけを見て判定できるものだな。システムや環境の状態を見なくとも判定できるエラーを出す役割。

処理を始めないと分からないもの(DBに指定されたエントリーがあるかとか)は、バリデーションでは扱わない。
DBにこの値があった場合はクッキーにこれが無いといけない…みたいなのも対象外。

日付として「'9999-12-31'」が指定されてもバリデーションでは引っ掛けない。これは有効な入力。
「'2008-13-45'」はバリデーションでエラーとして引っ掛ける。この日付が有効になる事はあり得ないから。
メールアドレスが正しいフォーマットかをチェックするのはバリデーションで、それが有効なメールアドレスかをチェックするのはモデル。
ユーザーIDとして正しいフォーマットならばバリデーションは通るが、当該ユーザーがいない場合モデルがエラーを出す。
637nobodyさん
2008/12/21(日) 00:53:43ID:???
>>636

なんとなく分かるけど、
例えばそれだと「2008-13-45は日付(のつもり)」ってことを
コントローラが知っとかないといけないってことだよね?

あと、日付が必要なくなった、とかいうときは
コントローラーを変更しないといけないってことにならない?


なんか拘ってるようでアレだけどお勉強スレってことで許してw
638nobodyさん
2008/12/21(日) 00:57:41ID:???
って、もしかして、リクエストとして渡ってくるものを想定してるのかな。

hoge.php?date=20081231

とか。
639nobodyさん
2008/12/21(日) 12:32:43ID:???
>637
「コントローラ」の指している範囲が俺と違う気がする。

俺はディスパッチャ(処理の振り分け)部分じゃなくて、そこから振り分けられる先のコントローラを指している。
ぐぐったが、「アクション」としてクラスにして丸ごとコントローラから切り離す文化圏もあるようだな。
「日付のつもりで送られてくる文字列がある」という事実は、ディスパッチャは(たいていの場合)知らない。
が、コントローラ(アクション)は知っている。だって知らないと日付具象モデルに処理を引き渡しようがないからな。

Cにはどの道変更が入る。リクエストをモデルに引き渡すのが仕事だからな。
「日付がどこからどう渡ってくるか」はCの管轄であってMじゃない。Mはそれを知っていてはいけない。
Mは「日付を渡されたらどうする」だけ知っていればよく、実際問題どこに日付があるかはCが隠蔽すべき。

たとえば、日付指定でDBからレコードを取っていたのを、「無指定時は今日と見なす」と変更したとする。
この場合は、Cを「日付省略時は現在の日付でMを呼び出す」ように変更し、Mには触れないのが正しい。
「省略時は日付を無視して過去のレコードを全取得する」という場合は、データ取得ロジックが変更なのでまずMは変わる。
制御の構造、呼び出しインターフェイスも変わるのでCも変わる。
640nobodyさん
2008/12/21(日) 12:37:44ID:???
まあ実際は、日付省略時のMの挙動を変えるだろうけどな。

>638
入力値以外のもの(DB内の値とか処理結果)の検証は当然モデル。
というか、そういうのは一般にはバリデーションとは言わずアサーションと呼ぶ。
641nobodyさん
2008/12/21(日) 13:45:12ID:???
>>639
Cは振り分けだけが仕事だと思ってたんだけど。
その先にさらに C があることなんてあるのか。

サブコントローラーみたいな感じ?
642nobodyさん
2008/12/21(日) 14:51:26ID:???
>641
やっぱ、そこか。
例えばブログの場合、エントリー群を司るモデルや、タグクラウドを司るモデルができる。これは自明だな。
で、データを受け取って画面を表示するだけの、ごく単純なビューがいる。これも自明。
で、それら呼び出してページのデータを作る、という「データの統合」を司るクラスが必要になる。
これをMVCのうち、MとCのどっちに置くかの問題。

MVC、MVCって言ってるけど、本質的には4層なんだよ。
処理の振り分けに1層を割くならば、4層なくてはならない。
処理の振り分け=呼び出すCの決定(ディスパッチャ)→どのMを呼び出すかを制御する(コントロール)
 →データを実際に扱う(モデル)→表示(ビュー)、となる。

実際のフレームワークだと、RailsやZendはDispatcherが振り分けを担当し、制御はコントローラが執っている。
(だから、おまいの目から見れば、コントローラは仕事をやりすぎに見えるはず)
SymfonyやCakeだとControllerがディスパッチを担当し、制御はActionが執っている。
CodeIgniterだとディスパッチは単一のエントリポイント(リクエストを受けるphpファイル)であるindex.phpが行なって、制御はCが行なっている。
643nobodyさん
2008/12/21(日) 15:35:51ID:???
>>642
>たとえば、日付指定でDBからレコードを取っていたのを、「無指定時は今日と見なす」と変更したとする。
>この場合は、Cを「日付省略時は現在の日付でMを呼び出す」ように変更し、Mには触れないのが正しい。
これって制御じゃなくてロジックだからモデル的仕事じゃねぇの?
644nobodyさん
2008/12/21(日) 16:01:38ID:???
>>642
横槍で質問してすまんかった。
すげーわかりやすい。
勉強になった。ありがとう。
645nobodyさん
2008/12/21(日) 16:03:24ID:???
4層www
646nobodyさん
2008/12/23(火) 01:41:15ID:???
>>645
あなたの顔に死相が出ていますよ。4層だけに。
647nobodyさん
2008/12/24(水) 12:54:19ID:???
考え方としてディスパッチとコントロールは分けるべきだが、
実装するときは、コントロールで括るよな?
648642
2008/12/24(水) 22:47:37ID:???
>647
M・V・Cで分けるならCってのは同意。いちおう
> 処理の振り分けに1層を割くならば
と予防線は張ってあるわけだが。
俺はControllerの親クラスとかControllerFactoryでディスパッチする事が多い。
649nobodyさん
2008/12/25(木) 12:55:55ID:???
>>648

> Controllerの親クラスとかControllerFactoryでディスパッチする事が多い

ディスパッチャーのインターフェースを作って、コントローラクラスでインプリメンツするってのは駄目なの?
650nobodyさん
2009/01/04(日) 21:25:44ID:???
保守
651nobodyさん
2009/01/10(土) 18:38:23ID:???
保守
652nobodyさん
2009/01/18(日) 01:35:36ID:???
手始めに、サイトのリニューアルついでにSmarty入れてCMS'っぽく'してみる。
653nobodyさん
2009/01/26(月) 20:14:56ID:???
お?サンプルか?
654nobodyさん
2009/02/02(月) 14:37:18ID:JcAer1H1
勉強すればするだけフレームワーク使えば手っ取り早いことがわかった。

自作のモチベ下がっちまったい。
655nobodyさん
2009/02/02(月) 14:46:20ID:???
自作する理由は楽するためじゃないだろう
656nobodyさん
2009/02/02(月) 14:54:00ID:???
もっと手っ取り早く使えるフレームワークをつくるために勉強すればいい
657nobodyさん
2009/02/02(月) 15:06:11ID:???
元々目的としては自サイトで使うための軽量フレームワークを作るために勉強してたの。

で、既存のフレームワークのマニュアルとかソースを参考にしながら作ってたんだけど、取り込むつもりが逆に呑まれた形。
658nobodyさん
2009/02/02(月) 20:06:44ID:???
凄く難解なソースを引き継ぎさせられて、途方にくれかかった。
で、市販のモジュールを使うなどして0から作り直すなどの方法を
模索したが、結局は引継ぎしたソースを解読して手を加えるのが
楽で、早い道であることが分かった。みたいな話かな?w
PHPではないが、俺はちょうどこんな感じの体験をしたことがあるw
659nobodyさん
2009/02/03(火) 00:06:52ID:???
まぁ、たぶんそんな感じ。
要するにフレームワークの魅力に気付いたわけですよ。
660nobodyさん
2009/02/03(火) 01:52:40ID:???
先に気づいてからやれば良かったな
661nobodyさん
2009/02/04(水) 08:03:26ID:???
そういうのは簡単に気づけないだろう。
プログラムは体感して分かっていくものなのだから。
662nobodyさん
2009/02/04(水) 21:38:41ID:???
俺としては魅力に気付けただけでも大きな進歩だ。

自作云々は別にして。
663nobodyさん
2009/02/05(木) 22:29:31ID:6GWaaOT6
あけおめ
664nobodyさん
2009/02/06(金) 07:54:15ID:???
では、その気づいた魅力的な部分をここなどで紹介してみるというのはどうよ?
PHPでOOPのスレの趣旨に添ってると思うし、他の人の意見を聞いて
参考になる部分もあると思うのだが。
665nobodyさん
2009/02/07(土) 01:12:17ID:???
>>4
宣伝乙
666nobodyさん
2009/02/09(月) 20:26:45ID:???
えらく昔の書き込みにレスしてるな。
667nobodyさん
2009/02/12(木) 07:33:22ID:???
フレームワークの魅力についてまとめてみるか?
668nobodyさん
2009/02/12(木) 09:08:20ID:???
どうぞ
669nobodyさん
2009/02/12(木) 15:59:22ID:???
>>667
wikiにしてもらえるなら俺も手伝う
670nobodyさん
2009/02/12(木) 20:11:52ID:???
いや、俺はそんなに文章がかけるほど知識は無い。申し訳ないが、サポートに回る
671nobodyさん
2009/02/12(木) 20:25:45ID:???
なぜにフレームワークの魅力をまとめようと?
672662
2009/02/12(木) 20:56:21ID:???
>>662>>667
だからね。
俺は人に語れるほどまだ理解してないから。
673nobodyさん
2009/02/12(木) 20:59:58ID:???
なんだ教えて君か
674nobodyさん
2009/02/12(木) 21:37:52ID:???
おまえもな
675nobodyさん
2009/02/12(木) 22:00:11ID:???
サポートするといってるんだから、教えてじゃないだろw
676nobodyさん
2009/02/13(金) 20:54:05ID:???
http://q.hatena.ne.jp/1188498291
677nobodyさん
2009/02/15(日) 23:40:26ID:???
>>676を読んでみて、PHPに限らず、ASP.NETを体感してみると、フレームワークの
メリットやデメリットがみえてくるんじゃなかと感じた。
あれは、ポストバックとか独自の理論があって、それを学ばないと使えるようになれない。
しかし、ページをまたがってデータの受け渡しをする際は、非常に便利な機能であり、
使いこなせるようになると、生産性が向上する。
678nobodyさん
2009/02/16(月) 00:05:47ID:???
一問一答形式でwikiでも作るか
679nobodyさん
2009/02/16(月) 00:44:15ID:???
visualstudioが優秀すぐる
680nobodyさん
2009/02/16(月) 11:09:32ID:IOY0ae9e
Java とか C#やったほうが飲み込みは早くなるのかな。
でも両者とも動かせるサーバって高いからなぁ。
Web以外にも用途はあるけど。
681nobodyさん
2009/02/16(月) 19:31:23ID:???
>>680
いろいろな言語に触れてみると、その分視野は広くなることだろう。
共通して実装している機能を見ることで、OOPの概念をつかんだり
出来るはずだし。
しかし、広く浅くにとどまっていると、何も作れないで終わるので、
物を作る際は、一つの言語に絞り込んでいた方が良い。

なので、java や C# においてはローカルで稼動させるのにとどまらせて
おいたらどうかな?ASP.NET だと、Webアプリでもローカルでテスト動作
させる環境が Express にもついてるし。
682nobodyさん
2009/02/16(月) 23:33:26ID:???
ウェブアプリの範囲なら、どの言語のどのフレームワークでも大差ないよ。
ASP.NETは、デスクトップアプリケーションからのアプローチなんで、これだけちょっと勝手が違うけど。
プログラミングを仕事にするなら、最初は型ありの言語をやった方がいいと思う。
JavaとかC#が理解出来れば、PHPやPerlはすぐに分かる。
683nobodyさん
2009/02/17(火) 12:38:03ID:???
でも、perlってすぐ忘れちゃうよな...
684nobodyさん
2009/02/17(火) 20:53:57ID:???
>>683
それはそれで良いのではないかと思っている。
perlのモットーがあわないのであれば、PHPを使うで良いと思うし。
685nobodyさん
2009/02/23(月) 20:40:12ID:???
PHP では OOP を学べないという意見があるが、結論だけ
いうのではなく、その理由の部分を述べていくといいかもね。
686nobodyさん
2009/02/23(月) 21:35:23ID:???
別に学べるのでは?
687nobodyさん
2009/02/23(月) 22:27:49ID:???
ん、どこかにPHPでは学べないと書いてあるのかな?

個人的には、純粋にOOPを学びたいのであれば別の言語がいいかなーとは思う。
理由は、Webは身近だし使い慣れてると言えるかもしれないが
PHP以外のHTMLやらJSやらHTTPプロトコル等知らなければいけない知識が多くあるから。
その辺を知っていれば問題はないと思うけどね。
688nobodyさん
2009/02/23(月) 23:55:46ID:???
オブジェクト指向を本格的に勉強したければ、GUIのプログラムを書いた方がいい。ウェブアプリじゃオブジェクト指向が出る幕はない。
689nobodyさん
2009/02/24(火) 02:09:17ID:???
出る幕はあると思うが、最終的にフレームワークを構築することになると思う。

いきなりWEBフレームワークを作ることは難しいので、
実際に存在するフレームワークのソースを追いかけ、参考にしながら、
オレ的フレームワークを組み上げることで、様々な知見を得ることができると思う。

また、これらのフレームワークはたいてい、何らかのデザインパターンやアークテクチャパターンが使われているため、併せてこれらも学習する必要があると思う。
690nobodyさん
2009/02/24(火) 12:23:13ID:???
WEBアプリでもActionScript3なら、バリバリOOPだYO!
691nobodyさん
2009/02/24(火) 12:40:12ID:???
まあ、いつかはサーバサイドはAPIを提供するだけで、クライアントのUIはFlashとかJavaScriptに任せるような時代がくるのかも。
692nobodyさん
2009/02/24(火) 19:41:39ID:???
>>691
エンタープライズならそんなケースいくらでもあるだろw
693nobodyさん
2009/02/24(火) 20:31:42ID:???
>>689
俺的フレームワークなんて作らないほうがいい。
自己主張ばかり強い勘違いになりがちだし、遠回り。
良い先人の手本を眺めるほうがよっぽど効率的だわ。
694nobodyさん
2009/02/24(火) 20:35:16ID:???
>>693
ホントにそうだとしたらとっくに淘汰されて現状のフレームワークの乱立状態にはならないと思うが
695nobodyさん
2009/02/25(水) 06:21:18ID:???
>>692
聞いたことないな。そんなことするぐらいなら、Windowsアプリケーションなり、Accessなりで直接DBを参照するから。
696nobodyさん
2009/02/26(木) 22:25:57ID:???
クライアントマシンの性能がこれだけアップしているのに、
クライアントマシンの性能を利用しないなんて
どれだけ無駄なんだかw
697nobodyさん
2009/02/26(木) 23:57:14ID:???
ぶっちゃけサーバサイドのフレームワークは制作の効率のためであって
性能うんぬんは考えてないんだよな
698nobodyさん
2009/02/27(金) 00:54:42ID:???
勉強不足で申し訳ないんだが、制作の効率より性能うんぬんを優先したフレームワークを教えて欲しい
699nobodyさん
2009/02/27(金) 05:45:51ID:???
つーか開発効率は性能に含まれるだろう
700nobodyさん
2009/02/27(金) 06:00:50ID:???
は?
701nobodyさん
2009/02/27(金) 13:31:01ID:???
699 名前:nobodyさん[sage] 投稿日:2009/02/27(金) 05:45:51 ID:???
つーか開発効率は性能に含まれるだろう
699 名前:nobodyさん[sage] 投稿日:2009/02/27(金) 05:45:51 ID:???
つーか開発効率は性能に含まれるだろう
699 名前:nobodyさん[sage] 投稿日:2009/02/27(金) 05:45:51 ID:???
つーか開発効率は性能に含まれるだろう
699 名前:nobodyさん[sage] 投稿日:2009/02/27(金) 05:45:51 ID:???
つーか開発効率は性能に含まれるだろう
699 名前:nobodyさん[sage] 投稿日:2009/02/27(金) 05:45:51 ID:???
つーか開発効率は性能に含まれるだろう
699 名前:nobodyさん[sage] 投稿日:2009/02/27(金) 05:45:51 ID:???
つーか開発効率は性能に含まれるだろう
702nobodyさん
2009/02/27(金) 13:31:44ID:???
>>698
性能を求めるならフレームワークなんて使うなって話
703nobodyさん
2009/02/27(金) 19:50:17ID:???
>>698が言ってる「性能」って何?
これは釣りなのか?
704nobodyさん
2009/02/27(金) 20:00:15ID:???
「やあ、とりあえず性能の一番いいやつを一つくれないか。」
「今日はCakePHPがお勧めとなっております。」
「じゃあ、そいつをくれ。」
「かしこまりました。」
705nobodyさん
2009/02/27(金) 20:35:39ID:???
>>703
なんで俺に絡むんだよ。
たった1個上のレスも読めないのか?
釣りなのか?
706nobodyさん
2009/02/28(土) 01:39:57ID:???
>>705
何言ってるんだ?
1個上のレスを読んでるから性能って何って話だよな
707nobodyさん
2009/02/28(土) 02:02:53ID:???
>>697に聞いてくれよ
俺は知らんよ。
使われた言葉返しただけなのにw
708nobodyさん
2009/02/28(土) 04:26:33ID:???
1ファイルにphp+html+css+jsべた書きが催促
709nobodyさん
2009/02/28(土) 08:03:49ID:???
SEO的に最悪だな
710nobodyさん
2009/02/28(土) 08:44:26ID:???
出力されるHTMLがSEOに合ったものなら、途中経過は関係ない。
711nobodyさん
2009/03/04(水) 21:56:11ID:vdYaMRth
PHPでMVCってModel, View, Controllerの3クラスに
それぞれ適当な補助クラスをコンポジる感じでok?
712nobodyさん
2009/03/04(水) 22:30:14ID:???
ng
713nobodyさん
2009/03/04(水) 22:51:16ID:???
検索するとViewは普通にHTML部分にしてクラスにしない奴が多いが…
それはどうだろう…
714nobodyさん
2009/03/04(水) 23:44:42ID:???
>>713
別にありじゃない?
PHPTALってのもあるし
厳密には、TALに値渡す必要があるので、Viewが純粋なHTMLのみという訳ではないけど
715nobodyさん
2009/03/05(木) 10:13:09ID:???
未だにコントローラが何者なのかわからねえw
コンポーネントってのもよくわからんし。
716nobodyさん
2009/03/05(木) 11:05:22ID:???
基礎中の基礎すぎるだろ
717nobodyさん
2009/03/05(木) 12:25:35ID:???
コントローラの役割そのものがわからないというよりも『どこまでがコントローラがやるべきことなのか?』ってことかな。

ビューとコントローラで迷うことはないけど、モデルとコントローラのどっちに書くべきかな、って言うのが多い。


まぁ、経験で補うもんだろうね。
718nobodyさん
2009/03/05(木) 17:40:27ID:???
100%中の100%!!!!!!!!!!

byとぐろ兄弟
719nobodyさん
2009/03/06(金) 04:31:52ID:???
ってか3つに分けようとするから分からないんじゃない?
720nobodyさん
2009/03/06(金) 14:28:15ID:???
>>719
なんだ君も教えて君か
721nobodyさん
2009/03/10(火) 12:40:11ID:???
アセクサ
722nobodyさん
2009/03/29(日) 09:52:31ID:???
アホクサ
723nobodyさん
2009/04/06(月) 08:51:50ID:???
保守しときます。
724nobodyさん
2009/04/06(月) 09:51:43ID:???
保守要らない板だから・・
725nobodyさん
2009/04/08(水) 23:43:02ID:???
PHP研究所って全然PHP関係の書籍ださねーな。
社内だけで技術囲ってんじゃねーぞ。
726nobodyさん
2009/04/08(水) 23:49:40ID:???
全然おもしろくない
727nobodyさん
2009/04/10(金) 03:54:17ID:4A05Vd6N
オブジェクト指向で、MVCのMとCがいまいちつかめない
処理はModel、ViewとModelを制御するController
ってある。
例えば、ある条件を満たしたときに、データファイルからデータ一覧をリスト形式にしたくて、
・データ1
・データ2

みたいにずらーと繰り返しして表示するとき、
modelには、ある条件を満たしたしたかどうかを判断する処理を、
viewには<div>やら<ul><li>を、
controllerには繰り返しのwhileを?
って迷ってしまう。
でもwhileて処理になるからmodelに書いた方がいいんじゃあいの?、と・・
でもmodelにwhileの処理かくと、同時に<br>やらもmodelに書いて
viewには何を?・・ってなってしまって先にすすめない・・

つづく
728727
2009/04/10(金) 03:59:45ID:4A05Vd6N
ごめん、やっぱりつづかない。
非常にわかりにくいかもしれないけど
こういうときって、素直にcontrollerにwhile処理いれとけばいいのかな。
でも、controllerに制限させるものが二、三個ならいいけど
もっとwhile処理するものが多くなれば、
処理がかぶってくるんだけど、
それが気持ち悪くて・・
なにか上手い回避方法を教えてください
729nobodyさん
2009/04/10(金) 04:08:52ID:4A05Vd6N
で、一応考えたのが、
viewにはhtmlタグだけを、
modelには条件処理とwhile処理を、
このwhile処理の中にviewで書いたhtmlタグを
放り込んで繰り返し処理。
controllerで、このmodelに引数入れてやれば
このmodelの変数には、
条件処理された結果と、
htmlタグつきのデータ一覧が格納されて、
表示される。
みたいにしたんだけど、これでいいのかな。
wikiのまとめサイトみるとmodelにwhileかかずに
controllerに書いてたから、何か意図があってやってるのかなと
730nobodyさん
2009/04/10(金) 04:22:59ID:???
MVCまだ早いんでないかな
731nobodyさん
2009/04/10(金) 09:37:55ID:???
Model はデータをどこからともなく持ってくる。

View にはテンプレートエンジン使って View の中でループさせる。

Controller は Model に「データ持ってこい」と頼んで、受け取ったデータを今度は View に渡して「表示しろ」と頼む。
View は渡されたデータをぶん回して表示する。
「頼む」ってのは メソッドを呼び出すことを指す。


嘘教えてたら許して
732nobodyさん
2009/04/10(金) 10:04:35ID:???
>>731
というとつまり、もしも動的にデータを一覧表示させたいときなんかは、
”データ持ってこいとModelに頼む→Viewに渡して表示させる”
という一回の表示を、whileなりなんなりを使って何回も繰り返す操作を
Controllerがやるってことでいいのか。
733nobodyさん
2009/04/10(金) 10:51:33ID:???
date.txtにdate1,date2,date3,date4ていうデータが入ってたとき、

"2"という条件を与えたときに、
date1<br>
date2<br>
"4"という条件を与えたときに、
date1<br>
date2<br>
date3<br>
date4<br>
という一覧を行いたい場合。

Modelには、指定されるデータを一つ引き出せるメソッドを、
Viewには、Controllerから受け取ったModelの一つのデータの後ろに、<br>を加えてechoするメソッドを、
そしてControllerで、Modelのメソッドを実行して、得られたデータをViewのメソッドへ渡し、一つデータを表示させる、
この操作を条件分繰り返すwhileもControllerに書いておく。
で、いいのけ

超基本的な場合、イメージ的には、
・Viewは、htmlしか知らない人でも、(phpの変数以外は)htmlタグ部分がはっきりしてるので弄ろうと思えば弄れる作り
・Modelは、処理されたデータを与える
・Controllerは、初期条件をMVに与えたり、MVにあるいろいろなメソッドの中から、
 必要なものを選んで、データを得たり、表示させたり(MをVに渡して表示させたり)、
 MVを組み合わせて完成したものを表示させる
みたいな感じ
だけで基本的名ことがまだまだ全然わからん
734nobodyさん
2009/04/10(金) 12:01:58ID:???
>>732
まあ作り方によるんだろうけど……

ループでViewを何回も呼び出すよりも、例えば配列でデータを一度に全部渡しちゃって、Viewにループしてもらったほうがスッキリしない?
Viewの中にPHPの生のコードが入るのを避けたいなら、先に挙げたテンプレートエンジン使うとかすればいいし。
735nobodyさん
2009/04/10(金) 12:17:29ID:???
>>734
たしかにそうか
ループするデータ表示のデザインて単純なものが多いだろうし
デザイン変更するときも、viewにphpのコードが入っててもそこまで苦にはならないか。
テンプレートエンジンどれがいいか決めれないし、
controllerにphpコードの種類がいっぱい入ってくると見にくいし長くなりそうだから
とりあえずはviewでループさせる方法にしてみるわ
あんがと
736nobodyさん
2009/04/10(金) 12:48:47ID:???
>>727

レス全部読んでないから、的外れになるかもしれないけど、
MVCの基本コンセプトは『プログラムの着火点(エントリーポイント)は、URLである』
という考え方が中心になっているらしいよ
つまり、どんなWEBアプリもそのプログラムにアクセスしないと何も起こらないという発想。
そこから更に考えを発展させて、URLの一部にメソッドを含めよたのがMVCのポイント。

この、メソッドを含んだURLを処理する枠組みをコントローラにした訳。

だから、コントローラを中心にデータをサーバに貯めるならModelに、
データをユーザに表示するならViewにと処理系を分けた。

一般的にビジネスロジックはModelにとか言われるけど、
このビジネスロジックとはデータに正規表現をかけて別の形に置き換えるとか、
特定の数値を暗号化したりとか、殆どの処理の処理を指す。

だから、ロジックの中心はModelで処理され、コントローラはただMやVにデータを振り分けるだけに徹するのが
正しいMVC設計と言われてる。

実際のコード量もControllerが異様に肥大しているMVCは、悪いMVCとされている。
迷ったらMにロジック書いて、Cから呼出すようにする。
どうしても呼出せないロジックだけCで処理しよう。
737nobodyさん
2009/04/10(金) 13:22:45ID:???
>>736
なるほど
完全に思い込みで、
Vには、phpコードでの処理に関連するものはほとんど無くしてhtml表示メインが良い
みたいになぜか考えてしまっていて、なかなか進めなかった。

>メソッドを含んだURLを処理する枠組みをコントローラにした訳。
>だから、コントローラを中心にデータをサーバに貯めるならModelに、
>データをユーザに表示するならViewにと処理系を分けた。
これで、C、M、Vにはそれぞれこれをしようっていう考えが固まってきて
踏ん切りがついて先にすすめそうだ
とんクス
738nobodyさん
2009/04/11(土) 01:35:03ID:???
ループして全部表示させるっていうのはVの仕様って気がするんだよねー。

最初の1件とか最初から100件とか、或いは全部っていうのはVの都合なわけで、
変更したいって思ったときはVだけ触ればよくしたい。

ってことで、
無駄とかなんとかは気にせずに、純粋な感じでいうと
Cの人は全部もらって、そのままVの人に渡す
っていうのがMVCぽいかな、って思う。

739nobodyさん
2009/04/11(土) 07:42:37ID:???
>>738
俺は、Vの役割は「もらったデータを表示する」だと思ってるから、
ループする処理とかはCの役割だと思うけどな。
Vは、大量データ表示用のフォーマットや、1件詳細表示用のフォーマットを
持っているという形。
Cは、指定された件数のデータを表示させる機能を持っている、という形。
740nobodyさん
2009/04/11(土) 07:47:58ID:???
抽象論も大事だけど、具体的にコードを書いていきながら進めると分かりやすくなるかもしれないね。
質問者さんは、自分の思う発想でコードを書いてさらしてみたらどうかな。
それに対していろいろな人がレビューをすると何か見えてくるかもしれない。
741nobodyさん
2009/04/11(土) 14:03:22ID:???
PHPじゃないけど、こんな記事があった。

ASP.NET MVC入門
http://www.atmarkit.co.jp/fdotnet/aspnetmvc/aspnetmvc01/aspnetmvc01_01.html
742nobodyさん
2009/05/07(木) 16:51:10ID:???
OOPの理論って奥が深いな。
デザインパターンなども学んで理論に忠実に沿った理想的な
プログラミングをしてみたいなとも思ったけれど、つきつめると
ケースバイケースってことに落ち着くから、こういう、忠実さを
追いかけるのは無駄な考え方のような気もしている。
この考えで合ってるよね?w
743nobodyさん
2009/05/07(木) 16:54:10ID:???
結論出ちゃったじゃないか
744nobodyさん
2009/05/07(木) 20:10:16ID:???
それ、ASP.NETに新しく導入された「ASP.NET MVC」ってフレームワークの記事なんだよ。
そもそもASP.NETはイベントドリブンなフレームワークで、本来の意味でのMVCを採用してたんだけど、StrutsとかRoRとかがウェブで流行ったから、MSも似たようなフレームワークを作ったわけ。
だからのこれまでのASP.NETの方が本来的なMVCに近い。「ASP.NET MVC」は「ASP.NET ウェブMVC」とかって名前にすれば良かったのに。
745nobodyさん
2009/05/07(木) 20:53:37ID:???
M$って、紛らわしい名前つけるのが好きだよね。
ASP.NETにおいてMVCに関する詳しい記事かなと思ったけれど、
実際に読んでみると、まったく別なフレームワークってことだった。
違いについて理解するのがひとつ面倒になったなぁ。
746nobodyさん
2009/05/07(木) 23:05:13ID:???
stackoverflowを作ったヤツね。
747nobodyさん
2009/05/19(火) 20:06:52ID:???
保守しとくね。
748nobodyさん
2009/06/18(木) 20:12:33ID:???
なんでカソってんだー
749nobodyさん
2009/07/02(木) 08:55:14ID:SGa5I59I
PHPにおけるOOPは100mを自動車で走るようなもの
自転車を使え
走れ
歩いてもいいぞ
750nobodyさん
2009/07/02(木) 09:07:04ID:???
OOPを使いまくる必要はないけど
必要な機能をモジュール化したいときにOOPをいいとこ取りすれば便利
751nobodyさん
2009/07/02(木) 09:12:44ID:???
>>748
秋田w
752nobodyさん
2009/08/27(木) 07:51:29ID:???
>>748
最初に設定していた目標が概ね達成出来たからじゃね?w
っていうか、このスレに求めているものを書いていけば
盛り上がりを戻す可能性もあると思うよ。
質問するとか、何かソースを提供するとか。
753nobodyさん
2009/10/25(日) 21:56:08ID:???
一応保守しておきます。
754nobodyさん
2009/10/30(金) 22:56:19ID:???
OOPのしっかりしてるFWどれ
755nobodyさん
2009/11/13(金) 21:51:59ID:???
FWは、その開発目的によるので、結論は出ない。
いや、あおりとかじゃなくて。
756nobodyさん
2009/11/19(木) 15:33:07ID:???
コードの参考になるのはどれかと
7571 ◆SWtzLesEmM
2009/12/17(木) 22:30:30ID:???
PHPのフレームワークでMVCのタイプを使ってみました。
同じ機能を作るのに、コードを書く量が少なくて済むと楽ですね!

ただ、MVCだとスクリプトのファイル数が多くなると、ゴチャゴチャして見づらいと思いました。
MVC以外のフレームワークでオススメのものはありますか?

http://www.slideshare.net/NetPenguin/mvc-2659370
・PAC
・RecursiveMVC(HMVC)
・MMVC
・Doc/View
という仕組みが紹介されていました。
758nobodyさん
2009/12/17(木) 22:33:57ID:???
特に無い
7591 ◆SWtzLesEmM
2009/12/17(木) 22:48:51ID:???
>>754
http://d.hatena.ne.jp/sotarok/20091126/modern_php_programming_at_pfi
↑このスライド資料の72ページ目に、PHPフレームワークの評価が紹介されていました。

・CakePHP
 世界でも日本でも大流行り。当然日本語での情報量も多い。
 Modelが使いやすい。それ以外は嫌いだけど。
 Cake3が別フレームワークにfork

・ZendFramework
 世界的にシェアNo.1?
 書く量の減らないドMフレームワーク
  というかいわゆるライブラリ群

・symfony
 これも利用者多い
 大規模向け。がっちりしてる。

・Ethna
 グリーはこれで動いている!(古いバージョンだけど)

・rhaco2
 大本命の超変態フレームワーク
 すごい

Ruby(RoR)っぽいFW → CakePHP / Lithium
Java(Struts)っぽいFW → symfony
Python(Django)っぽいFW → rhaco
というかんじでしょうか?
7601 ◆SWtzLesEmM
2009/12/17(木) 22:56:44ID:???
>>756
http://d.hatena.ne.jp/kagigotonet/20091215/1260851032
>PHPはWeb特化言語という特性上他の言語では見られない強力な仕組みがあります。
>その特徴は他の言語では参照で取り回すところを文字列で取り回すところである、と言えるでしょう。
>可変関数
>PHPのフレームワークは、これを基本としています。ライブラリ、モジュールを動的にロードするのが非常に容易
>可変変数
>このように可変変数や可変引数を組み合わせるだけでも、少ないコード量でかなり複雑なことが可能になります。

各フレームワークのディスパッチ(処理の割当て)の仕組みを見ると、参考になりますね。
7611 ◆SWtzLesEmM
2009/12/17(木) 23:07:31ID:???
>>750
「名前空間」を活用すると、たくさんモジュールを作っても分類が楽になりますね!
http://d.hatena.ne.jp/Fivestar/20091215
http://prezi.com/0-vyhjdkslih/
762nobodyさん
2009/12/17(木) 23:10:38ID:???
人の書いた文章を全文コピペするのはどうかと思うよ
763nobodyさん
2009/12/17(木) 23:11:20ID:???
あ、上のは主に>>759に対してね
7641 ◆SWtzLesEmM
2009/12/17(木) 23:43:57ID:???
>>734
>Viewにループしてもらったほうがスッキリ
そうですね。
データをループ表示させるのは、ビューの役割。

ビューの部分には
・テンプレート(HTMLファイル)
・テンプレートエンジン(HTMLファイルに文字列を当てはめるパーサー)
の二つが含まれている形にすれば、
表示に関するロジック(繰返し表示の処理など)はビューの中に置けばOK
=表示に関する機能を修正する場合、ビューの中を探せばOK
7651 ◆SWtzLesEmM
2009/12/18(金) 00:45:09ID:???
>>727
MVCのモデルはどんなふうに作るか?という話で、
・トランザクションスクリプト
・ドメインモデル
という二つのスタイルがあるそうです。

http://pc11.2ch.net/test/read.cgi/php/1241341332/
http://proshile.blog.drecom.jp/archive/616
・トランザクションスクリプト
 →古きよきC言語時代の関数が主体の書き方
・ドメインオブジェクト
 →オブジェクト毎に内包する値と役割の責務を明確にしたOOPライクな書き方

MVCのモデルの部分は2層に分けて、
(1)ビジネスロジックコンポーネント
(2)デーアクセスロジックコンポーネント(O/Rマッパーを含む)
と分類する考え方があるそうです。

http://satoshi.blogs.com/life/2009/10/rails_mvc.html
http://d.hatena.ne.jp/p4life/20091014/1255532618
>Skinny Controller, Fat Model
・コントローラーはシンプルにする
・モデルに処理を集約する → 上記(1)ビジネスロジック=データの加工を担当
・モデルはデータの整合性を保証する → 上記(2)データアクセスロジック=データの読み書きを担当

http://www.virtual-tech.net/blog/2008/10/reflex-restful.html
PHPでOOP->画像>3枚
↑この図だと、モデルの部分が2層に分かれていて、
サービス層=上記(1)
ドメイン層=上記(2)
という形になるかと思います。
7661 ◆SWtzLesEmM
2009/12/18(金) 00:55:44ID:???
>>728
C側に書いてあるコードを、なるべくM側の方に移動した方がスッキリするかも?
CとMの間のデータ受け渡しについて、こんな記事がありました。

http://q.hatena.ne.jp/1242894491
>個々のSetterをオーバーライド出来るところが
>symfonyの便利な部分じゃないでしょうか。
>これが出来ないと個々のコントローラでデータを加工するハメになります・・。
>「MVCとして洗練されている」というのは
>「MVCに忠実に機能している」というのと同義かと思います。

一口にOOPと言っても、各フレームワークでちょっとずつ使い方に違いがありますね。
7671 ◆SWtzLesEmM
2009/12/18(金) 01:20:21ID:???
>>89
フレームワークを使ってみて、OOPの使い方の理解が深まりました。
皆さん、たくさんのアドバイスをいただき、どうもありがとうございました。
分からないことがあっても、検索したり質問して1個ずつ埋めていけば、確実に進歩できると思います。

どんなプロフェッショナルな人でも、最初は素人だった…
これからPHPの勉強を始める方がいましたら、焦らずに頑張ってくださいね!(*^o^*)/
768nobodyさん
2010/01/16(土) 21:42:43ID:???
どのフレームワーク?
769nobodyさん
2010/03/05(金) 11:55:14ID:???
http://www.phppro.jp/school/oop/vol1/1
サイト見つけたので紹介しておきます。
770nobodyさん
2010/04/20(火) 14:58:53ID:???
オブジェクト指向ってrequire文とinclude文みたいな考えと同じかな?
必要なときにどこからでも呼び出せるプログラムみたいなものだよね。
771nobodyさん
2010/04/20(火) 18:56:50ID:???
うん
772nobodyさん
2010/04/21(水) 02:32:40ID:???
OOPの説明で一番わかりやすかったのがプレーヤーの例

プレーヤーを継承した CDプレーヤー,MP3プレーヤー がある
それぞれに 再生,停止,早送り,巻き戻し,次トラック,前トラック という機能(メソッド)がある

具体的な処理はそれぞれが行うので,使う人はプレーヤーの処理している内容を
理解している必要はなく,再生したいときに再生ボタンを押すという事だけ
分かっていればいい。(カプセル化)

つまり考え方であって,そういう意味では間違ってないのかもしれない。
773nobodyさん
2010/04/21(水) 23:48:02ID:???
それぞれにあるのではなく、プレイヤーという抽象クラスにあるのでは?
774nobodyさん
2010/04/22(木) 01:28:13ID:???
>>773
ダックタイピングなら、それぞれにあってもいいよね
775nobodyさん
2010/04/22(木) 20:41:56ID:???
OOPの説明でダックタイピングの例出すの?
776772
2010/04/22(木) 23:04:57ID:???
>>773
そうなんだけど,具体的な実装がそれぞれ違うという意味で
ああいう書き方にした。
777nobodyさん
2010/04/23(金) 00:43:27ID:???
>>775
PHPは型にしばられない(しばられなさすぎて困る)スクリプト言語だからね。

逆に、静的言語のように型を意識しすぎると、スクリプト言語のメリットが少なくなると思う。

「じゃぁ、お前、クラス階層つかわねーのか?」と言われればノー
コンポーネント(レイヤ)の中では、型を意識し、拡張する場合は継承も使用する。
コンポーネント間の接続は型ではなくメッセージ(メソッド)に束縛させるように意識している。

でも最近は、interface作って、抽象クラス作ってというのがおっくうになってきたので、可能ならメソッドポインタによるコールバックで済ませちゃうこともしばしば。
778nobodyさん
2010/04/30(金) 11:21:02ID:???
Yiiブログチュートリアル 日本語訳
http://www.craftgear.net/docs/yii_blog_tutorial/index.html
本家の日本語訳が途中でストップしてるけど、こちらは全部訳してある。

本家
http://www.yiiframework.com/doc/blog/ja
779nobodyさん
2010/05/22(土) 17:38:18ID:???
保守しておきます。
780nobodyさん
2010/05/24(月) 00:43:02ID:???

javaや.NETはたまたPythonあたりの純血PGが書けばOOPっぽいソースになると思うよ。
PerlとかPHPから始めました、ってのはだめだな。
781nobodyさん
2010/06/09(水) 18:32:35ID:uqJikGsn
PHP6のオブジェクト指向ってなにか大きな変化ある?
782nobodyさん
2010/06/09(水) 21:02:23ID:???
遅延静的束縛とか
名前空間とか
783nobodyさん
2010/06/09(水) 22:05:43ID:???
名前空間は5.3だろ
784nobodyさん
2010/06/09(水) 22:50:19ID:???
遅延静的束縛もですが
785nobodyさん
2010/06/11(金) 20:18:27ID:???
機能追加がほとんどか。
じゃあ、PHP5のコードをPHP6に移植しても問題なく動くってことでいい?
PHP4→PHP5のときは大変みたいだったけど。
同じ思いをしたくない。
786nobodyさん
2010/06/12(土) 05:01:32ID:???
互換性見れば分かるだろ
787nobodyさん
2010/06/13(日) 07:15:58ID:???
逆に互換性なんかいいから関数の無茶苦茶な命名規則とか直して欲しい
788nobodyさん
2010/06/20(日) 11:50:01ID:???
関数はもうほうっておいて、
公式にオブジェクト指向ライブラリを提供すればよい
789nobodyさん
2010/06/20(日) 15:53:03ID:???
>>788
SPLって公式じゃないの?
790nobodyさん
2010/06/21(月) 16:09:23ID:L/6UXzEf
質問するのが怖いんだけど、自分はフォームのパーツを呼び出すのに
オブジェクト指向(クラス)を使ってるつもりなんだけど正しいのか自信がない

クラスformPartsの中で各プルダウンやラジオボタンの要素(nameとvalue)を
外部ファイルから読み込んどいて
$fp = new formParts();
$pref = $fp->callPullDown('prefecture',$val);
$job = $fp->callPullDown('job',$val);
$sex = $fp->callRadioButton('sex',$val);

こんな感じでメソッドでパーツの種類を指定しつつ(ラジオボタンかプルダウンか)
そのパーツの要素(都道府県とか職業とか)と既定値($val)を投げて呼び出してる。
プルダウン要素とかは各メソッド内部で引数によって外部ファイルから読みこんでる。

クラスってこんな使い方でいいの? 継承とかはさっぱりわからない、どういう状況で使うんだか。
あと1さん凄いね、ガッツがあるなぁ。。
791nobodyさん
2010/06/22(火) 02:52:17ID:???
OOではないな
792nobodyさん
2010/06/22(火) 02:53:02ID:???
分からないなら普通に勉強しろよ・・・
793nobodyさん
2010/06/26(土) 22:03:26ID:lGwy0O8s
ツールの勉強する前に基本を勉強しろ
794nobodyさん
2010/06/28(月) 10:27:12ID:PXXo1bnr
oopってさ
PHP最大の武器であるHTMLとの親和性の高さを殺してるよね
795nobodyさん
2010/06/28(月) 20:02:03ID:???
なんで?
796nobodyさん
2010/06/28(月) 22:25:44ID:???
いまの流行はテンプレートだから
PHPのHTML埋め込みなんてもう古い
797nobodyさん
2010/06/29(火) 01:12:38ID:???
そんな流行もあったねぇ。今は違うよ。
798nobodyさん
2010/06/29(火) 07:49:52ID:???
kwsk
799nobodyさん
2010/06/30(水) 18:24:45ID:???
テンプレートってどんな利点があるの?
そもそもPHP自体テンプレートみたな言語じゃん。

index.php
 <?php
 $title = "hoge";
 $hello = "hello world";
 include "template.php";
 ?>

template.php
 <html>
 <head><title><?php echo $title ?></title><head>
 <body>
 <h1><?php echo $hello ?></h1>
 </body>
 </html>

こういうのとは違うの?
800nobodyさん
2010/07/01(木) 00:39:53ID:???
ほとんどの言語は、HTMLの中で
コードを動かすという発想で作られていない。
コードーの中でHTMLを出力するという発想。

そういう言語ではテンプレートが重要。
PHPでテンプレートの意味が薄いのは確か

ただテンプレートの意味がまったくないかというと、そうではなく
分業作業。つまりプログラマとデザイナに分かれて開発するときは便利。
デザイナはphpコードはまったく知らない。だからなるべくシンプルな
記号レベルの書き方であってほしい。しかもDreamweaverのような
HTMLエディタで見たときに不具合無く表示されるものの方がいい。
801nobodyさん
2010/07/01(木) 14:26:10ID:ksuFUfiJ
デザイナーでもHTMLとPHPの繋がりぐらいは分かる
いや、分かるようにPHPを書かなければならいと思う
それがPHP
802nobodyさん
2010/07/01(木) 19:54:20ID:???
デザイナーって馬鹿だな
まで読んだ
803nobodyさん
2010/07/07(水) 17:20:53ID:???
ここで議論してる奴らは世に影響力のないカスばかりだから参考にしなくて良い
804nobodyさん
2010/08/20(金) 12:31:24ID:???
廃れてるねー
805nobodyさん
2010/08/20(金) 14:43:19ID:???
852 忍者Perl ◆M5ZWRnXOj6 [] 2010/08/20(金) 13:30:09 ID: Be:
    マルチしてんじゃないですよクソゴミww(笑)wwww(笑)wwww(笑)wwww(笑)ww
    ww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)ww
    ww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)ww
    ww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)ww
    ww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)ww
    ww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)ww
    ww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)wwww(笑)ww
    ww(笑)wwww(笑)ww
    PHPやってるやつノウタリンばっかりwwwwwwww
806nobodyさん
2011/10/15(土) 11:25:55.76ID:???
PHPでOOPやると重いと感じませんか?
807nobodyさん
2011/10/17(月) 12:28:57.35ID:???
いいんです!
コーディングが楽だから、OOPで良いんです!!
808nobodyさん
2011/12/16(金) 08:42:12.54ID:???
逆だろ
OOPだからボトルネックが把握しやすくてメンテナンスや新実装がしやすくなる
809nobodyさん
2011/12/18(日) 18:35:23.31ID:XDa3NN+N
しかし、実行速度遅くなるね
810nobodyさん
2011/12/18(日) 21:04:34.89ID:???
遅くなるって体感でわかるほど遅くなるのか?
だったら書き方おかしいよ
811nobodyさん
2011/12/19(月) 12:14:00.72ID:8JBaGfsG
>>810
体感できないとは幸せだね。
812nobodyさん
2011/12/23(金) 12:11:53.50ID:???
case by case.
813nobodyさん
2012/01/12(木) 17:20:16.63ID:???
>>736
コントローラを肥大させてはならないという概念ではわかりにくい。
もっと具体的に境界線を引くべきだと思う。以下俺の意見なんだけど、

MVCってユニットテストために
ユニットテストを難しくする汚染要素を隔離するためにあるのだと思う。

具体的に言うとこんな感じ。
View(GUI, xml, html, json)
Controller(Session, Request, Form, 画面遷移などWeb独自のデータ)
Model(RDB, KVS)

MとCが分離されることでMはWebスコープから分離され、CはSQLから分離される。
でもこの理屈だとVとCの関係がおかしくなっちゃうね。
CがVにデータを渡すときはリクエストスコープを経由しないで
直に関数の引数で整数や文字列、オブジェクトを渡すべきって話になるから。
814nobodyさん
2012/01/12(木) 19:14:14.99ID:???
>>813
ゴバクしただけあって、センス悪いな。
815nobodyさん
2012/01/13(金) 12:44:55.80ID:???
>>813

> MVCってユニットテストために
> ユニットテストを難しくする汚染要素を隔離するためにあるのだと思う。

正しいが、これは現場的な視点の1つの考え方。

MVCは、スケーラブルなサイト構築のためのパラダイムという方が、しっくりくると思うが...
816nobodyさん
2012/01/13(金) 14:14:37.80ID:???
新米PGに教える方法としては良いかもしれん
817nobodyさん
2012/03/25(日) 15:09:36.84ID:AY6baIQV
PHPのOOPフレームワークを教えて下さい。
イメージとしてはJavaのStrutsのようなものです。
818nobodyさん
2012/03/26(月) 23:05:27.26ID:???
JavaStrutsはさておき、おすすめはYIIだな。PHPの中では美しい。
819nobodyさん
2012/03/28(水) 01:58:44.02ID:???
>>818
YII以外では無いのでしょうか?
YIIはOOPフレームワークとしては不完全です。
820nobodyさん
2012/03/28(水) 07:44:29.02ID:???
>>819
どの辺が?
821nobodyさん
2012/03/28(水) 10:27:45.07ID:???
>>820
オブジェクト指向言語であればオブジェクトを使用するところで、
配列を使用する点。
822nobodyさん
2012/03/28(水) 19:46:43.02ID:???
>>821
なんでOOPフレームワークを使いたいの?
823nobodyさん
2012/03/29(木) 00:32:40.17ID:???
>>822
OOPに慣れてるからです。
オブジェクトとして定義するところで
phpの場合、配列になるのでいらいらします。
たとえばCakePHP。ModelがModelになっていない。
やはり後付けでOOP機能が加わった言語では無理があるのですね。
824nobodyさん
2012/03/29(木) 00:43:24.51ID:???
>>823
ModelがModelになってないというのは具体的にどういうこと?
825nobodyさん
2012/03/29(木) 08:52:29.82ID:???
>>824
どのオブジェクト指向言語を経験しましたか?
それにあわせて話をします。
826nobodyさん
2012/03/29(木) 09:19:41.82ID:???
>>823
phpで本格的なオブジェクト指向ははじめから無理だよ。
827nobodyさん
2012/03/29(木) 12:36:50.80ID:???
PHPのOOP自体、後付けだし...
828nobodyさん
2012/03/29(木) 21:58:00.01ID:???
>>825
Java
829nobodyさん
2012/03/30(金) 00:15:47.79ID:???
>>828
ぜひStrutsの話を聞きたいですね。
たとえばCakePHPやsymphonyとどう違いますか?
830sage
2012/03/31(土) 00:44:25.15ID:5Y7rPOtM
PHPのOOP関連機能が中途半端なのは当たり前。
実行速度が遅いPHPではそもそも向いていない。
831nobodyさん
2012/03/31(土) 17:53:30.17ID:???
>>829
話をすると言って聞くばかりなのはなんでだ?
832nobodyさん
2012/03/31(土) 21:49:54.25ID:???
>>831
Javaのフレームワークのことを教えてください
833nobodyさん
2012/04/02(月) 08:52:20.20ID:???
>>832
ModelがModelになってないというのは具体的にどういうこと?
834nobodyさん
2012/04/02(月) 10:00:58.63ID:???
>>833
Javaのフレームワークの比較で語りましから、あなたが今までにどのJavaフレームワークを使ってきたのか教えてください
835nobodyさん
2012/04/03(火) 02:06:22.73ID:???
いやです
836nobodyさん
2012/04/03(火) 02:25:26.03ID:???
>>835
無知の自慢するべきではない。
あなたは一生、PHPでOOPの真似やってた方がよい。
8371
2012/04/03(火) 05:28:27.27ID:???
語りまし?
いやです
838sage
2012/04/03(火) 09:03:36.19ID:s3V9thNo
phpでOOPはダメぽ
839nobodyさん
2012/04/03(火) 12:55:40.44ID:???
いやです
840nobodyさん
2012/04/03(火) 13:09:50.72ID:???
完全にoopオリエンテッドな言語でしかoopしないって主張が、かなりダメぽ
841nobodyさん
2012/04/03(火) 13:40:01.23ID:???
phpは継ぎ接ぎだからoopに向いてない
速度の面でも不利
842nobodyさん
2012/04/03(火) 14:48:23.63ID:???
ダメな理由は遅いから。
843nobodyさん
2012/04/03(火) 16:36:45.23ID:???
>>834
答えられないなら最初から言うな見栄っ張りw
844nobodyさん
2012/04/03(火) 17:04:24.93ID:???
>>843
JavaのOOPについて語ってください。
話はそれからです。
845nobodyさん
2012/04/04(水) 00:03:58.45ID:???
質問者がJavaのどのフレームワークを使ったことがあるか書くべき
回答者がそのフレームワークとCakePHPを比較すべき
846nobodyさん
2012/04/04(水) 02:04:42.62ID:???
そんな比較はどうでもいい。
phpのOOP機能は単なるおもちゃ。
847nobodyさん
2012/04/04(水) 19:20:23.84ID:???
http://kameleon.s241.xrea.com/wiki/index.php?%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B
すいません
ここのフレームワークのソースをダウンロードしたいんですが、ダウンロードできません。
どこかで入手できないでしょうか
848nobodyさん
2012/04/04(水) 21:46:53.59ID:???
ログインできませんでした。
10分ほどしてから再度お試しください。
849nobodyさん
2012/04/21(土) 07:48:42.18ID:???
PHPでOOPやるとかアフォだろ
PHP自体カス以下だし
850nobodyさん
2012/04/25(水) 22:43:11.22ID:???
ほらほら、釣り釣り。
参加者募集中
851nobodyさん
2012/04/25(水) 23:12:37.13ID:???
関数のオーバーロード
852nobodyさん
2012/04/25(水) 23:13:48.71ID:???
関数?
853nobodyさん
2012/04/26(木) 00:11:07.09ID:???
phpの標準関数はどのクラスに属するのですか?
854nobodyさん
2012/04/26(木) 03:03:15.10ID:???
PHPはC++と同じで、クラスに属さない
関数があるんだよ。
855nobodyさん
2012/04/29(日) 05:23:36.37ID:???
クラスに属さない関数が多すぎ

そして、関数名が長くて、使いたいときに思い出しにくく覚えにくい。命名法が統一されてない。
856uy
2012/06/25(月) 19:13:52.21ID:???
PHPでOOPやるとかwwww
笑わせるなよwwww
857nobodyさん
2012/06/26(火) 12:21:43.29ID:???
黙れ、情弱!
便所に行ったら手ぐらい洗え

PHPでOOP->画像>3枚
PHPでOOP->画像>3枚
PHPでOOP->画像>3枚
858uy
2012/06/26(火) 12:34:02.34ID:???
俺はゴミカスだがエリートゴミカスだ
お前らのような下級ゴミカスとは格が違う
859nobodyさん
2012/06/26(火) 12:39:35.58ID:???
『オレは本当はスゴいんだ』病 www
860nobodyさん
2012/06/26(火) 14:05:10.76ID:???
>>857
逆に女子はトイレ行ったら手を洗うの禁止な。
861nobodyさん
2012/06/28(木) 00:47:58.97ID:???
phpでOOPとは単なるアホ
862nobodyさん
2012/06/28(木) 05:06:29.82ID:???
じゃあOOPでphpするよ。
863nobodyさん
2012/06/28(木) 12:22:49.87ID:???

でも、よく言った!
864nobodyさん
2012/06/29(金) 03:21:18.32ID:???
Java WicketとかPHP Piece Frameworkに流行ってほしいな。
平たく言えば何でもセッションに突っ込んでるだけなんだけどね。
865nobodyさん
2012/07/14(土) 00:10:18.29ID:???
ここまでトレイトの話題無しかw
866nobodyさん
2012/07/16(月) 19:14:45.27ID:???
実際トレイトって、あれば便利な気はするけどどこで使うのか思いつかん。
だれか使いこなせてるって人いますか?
867nobodyさん
2012/07/17(火) 07:36:18.33ID:???
PHPはむしろトラッシュ
868nobodyさん
2012/07/17(火) 15:16:40.35ID:???
まだ5.4使える環境に出会ったことが無いわ
869nobodyさん
2012/07/18(水) 09:22:42.54ID:???
なんでもセッションでいいよな
PHPってそういうもんだろ
870nobodyさん
2012/07/18(水) 12:20:26.18ID:???
セッションハイジャックの脆弱性を可能な限り排除できるなら、
セッション利用でOK。
871nobodyさん
2012/07/22(日) 02:33:05.17ID:???
>>1
PHPでOOPかよw
872nobodyさん
2012/07/22(日) 10:45:56.54ID:???
PHPでOOPなど愚の骨頂

PHPなど愚の骨頂
873nobodyさん
2012/07/27(金) 20:37:24.49ID:???
3Pとか4Pがあるように00Pもあるのです
874nobodyさん
2012/07/28(土) 00:10:09.70ID:???
OOPチーズ
875nobodyさん
2012/07/30(月) 23:46:30.86ID:???
>>1
PHPでOOPはできねえよ
876nobodyさん
2012/07/31(火) 11:18:22.44ID:???
PHPもOOPも時代遅れ
今はLOOP、すなわち論理オブジェクト指向プログラミングの時代
877nobodyさん
2012/07/31(火) 12:11:56.61ID:???
無限ループ
878nobodyさん
2012/08/05(日) 00:31:48.84ID:???
PHPerがJavaのIDEなんか使ってんじゃないよ。
秀丸でちょちょいとやるのがオツってもんだ
879nobodyさん
2012/09/27(木) 03:31:54.43ID:yKCGiKEV
>>866
>実際トレイトって、あれば便利な気はするけどどこで使うのか思いつかん。
>だれか使いこなせてるって人いますか?

traitは scala から持ってきた仕組み。
(もちろん scala も他の言語から影響を受けている)

trait とは:
- Mixin - Wikipedia http://ja.wikipedia.org/wiki/Mixin
- traitは実装を含めることができるinterface
- コードのコピペをfunctionalityにしただけ

利用シーンとしては、継承したくないけど、
ある実装を、このクラスだけでは使用したいという場合に
traitを作って、それを使います。(だから、コードのコピペと表現した↑)

AS3を書いてたときはmixinはイベント機能を追加する目的で
よく使ってた

以下PHPでの実例をどうぞ↓
880nobodyさん
2012/09/27(木) 07:12:35.38ID:???
カス言語PHPには無理
881nobodyさん
2012/10/06(土) 00:51:33.59ID:???
phpのオブジェクト指向機能はおもちゃ。
882nobodyさん
2013/03/25(月) 12:45:02.49ID:???
おもちはおもちや
883nobodyさん
2013/05/28(火) 08:36:15.70ID:???
https://www.google.co.jp/#q=php+oop
約 10,600,000 件 (0.13 秒)

PHPのオブジェクト指向入門 | オブジェクト指向PHP.NET
http://www.objective-php.net/&;amp;#8206;
884nobodyさん
2013/06/21(金) 04:07:35.21ID:v9NBCNRF
php
885nobodyさん
2014/03/02(日) 09:39:24.54ID:???
>>1
オブジェクト指向は愚かな考え。排便メソッドを実装した人間クラスから美少女クラスが作れない。
http://toro.2ch.net/test/read.cgi/tech/1393660194/88
886nobodyさん
2014/04/05(土) 00:55:43.80ID:???
メソッドを実行しなきゃどうってことはない
887nobodyさん
2015/02/14(土) 01:11:16.07ID:???
Formのクラス作ったら500行になっちゃった
これって糞プログラムの部類なのかな・・・
シンプルに書きたいのに機能付け加えていくとどうしても肥大化してしまう
888nobodyさん
2015/02/15(日) 02:10:36.84ID:???
美少女オブジェクトに排便しろというメッセージを飛ばすのか
胸が熱くなるな
889nobodyさん
2015/06/17(水) 18:33:41.70ID:???
ガベージコレクションは自動で実行されるものなので我々が命令するものではない
890nobodyさん
2016/09/08(木) 09:55:10.31ID:???
PHPでOOPなんてPOOP以外の何物でもない
891nobodyさん
2017/12/30(土) 14:11:40.74ID:YhlYw6jg
誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。

グーグル検索⇒『半藤のブブイウイウレレ』

TVD73U3V71
892nobodyさん
2019/05/09(木) 02:07:08.06ID:HHcYDMUs
phpについて役立つ情報とか
http://2chb.net/r/tech/1557329831/l50

4Z0
893nobodyさん
2023/08/26(土) 03:18:53.39ID:???
見ろ!人ごみに流されて変わってゆく私を
894nobodyさん
2023/09/26(火) 22:41:15.16ID:???
もう少しで楽しい時間がやってくるかな?

lud20241229154115
このスレへの固定リンク: http://5chb.net/r/php/1172205352/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「PHPでOOP->画像>3枚 」を見た人も見ています:
Phigrosでの愚痴
iPadでChrome
iPhoneで17live
HIPHOP板で語るR&B
中出しは英語で?
ケチドでO72
iPhoneで撮る写真
お前らってなんで天パなん?
10万円で何する?
LinuxでiPhone開発
お経で幽霊祓われるの?
お前ら今画像うpできる?
MHWってPCで出来る?
ゾイドをPS4で出せ!
PSO2で金剛ちゃん作れる?
monospaceでHP【2】
自宅サーバーでHP公開
iPhoneのSafariでさ
monospaceでHP【3】
HSPで出来るのか・・・
なんでお前らって天パなの?
iPhoneで絵を書いてみた
HSPで出来る範囲について
VIPでシャドウバース
VIPでシャドウバース
お前らどこでPS5予約すんの?
VIPでシャドウバース
iPaDOSはDOSですか?
お前らPS5どこで予約するの?
円安値上げでiPhone離れ
VIPでシャドウバース
今年出たMVでTOP3は?
お前らPCで何してるの?
10歳年上でもいいの?
お前らPS5何回払いで買うん?
iPhoneのXplaneで一緒に飛ぼう
でも正直KPOPに負けてるよね?
なんでお前らSPAM食わないの?
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
【画像】でっかいiPhone
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
VIPでシャドウバース
なんでNIPPONで通じないんだ?
VIPでシャドゥバース
VIPでシャドウバース
VIPでシャドウバース
ipodなんで亡くなったの?
13:49:28 up 72 days, 13:53, 0 users, load average: 8.33, 8.47, 8.20

in 0.076533079147339 sec @0.076533079147339@0b7 on 032702