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

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

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

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

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

「クラス」という仕組は便利そうですね。クラスを考えた奴、偉い!
00061 ◆SWtzLesEmM
垢版 |
2007/02/23(金) 13:54:53ID:???
>>3
なんかプログラミングって、カタカナ用語がたくさん登場しますよね><
クラスって聞いたら学校の「教室」を連想しちゃう><
0009nobodyさん
垢版 |
2007/02/23(金) 16:52:36ID:???
トリップ出してるのに自作自演もくそもあるのかw
00101 ◆SWtzLesEmM
垢版 |
2007/02/23(金) 19:44:43ID:???
>>7
>Webでオブジェクト指向
>http://pc10.2ch.net/test/read.cgi/php/1133489897/
>こっちじゃ何故駄目なんだ?

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

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

って擁護すると自演って言うのかな?
0013nobodyさん
垢版 |
2007/02/23(金) 22:38:47ID:???
まあ、PHPでOOPなんてのは、今までて来たtoku-hiroさん以外にも
書いている人は多そうだから(俺は知らないけど)
他のも出せば、>>1の疑いは晴れるんじゃないかな。
00171 ◆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/
「委譲」などの説明がありました。

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

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

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

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

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

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

という最低限の機能で作ってみて、
後から徐々に機能を追加して拡張してみましょう。
00241 ◆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切れのっているかという違い…些細なことはどうでもいいか。
00251 ◆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」という句を削らないとエラーになると思います。
00261 ◆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の高速開発手法
00281 ◆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 ;
0029nobodyさん
垢版 |
2007/02/25(日) 02:57:19ID:???
サンプルページ公開して
00302
垢版 |
2007/02/25(日) 16:11:09ID:???
定番のhelloを表示w
class hello {
var $aisatu = "こんにちは";
}

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

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


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


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




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


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


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

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

/index.html 掲示板のトップページ
/db.php データベースの接続関係のデータのファイル
/input.php メッセージ入力ページ
/list.php メッセージ一覧ページ
/message.php メッセージ詳細ページ
00361 ◆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>
00371 ◆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");
}

(以下、続く)
00381 ◆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;
}
00391 ◆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;
}
?>
00401 ◆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 = "";

(以下、続く)
00411 ◆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 = "名前、タイトル、メッセージをすべて入力してください。";
}
?>
00421 ◆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/は不要

もう一回訂正してアップします。
00431 ◆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 = "名前、タイトル、メッセージをすべて入力してください。";
}
?>

(以下、続く)
00441 ◆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>
00451 ◆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());
?>
00461 ◆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>
00471 ◆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>
00481 ◆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);
}
?>
00491 ◆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>
00501 ◆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>
00511 ◆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でクラス図を作ってみたいです。
0052nobodyさん
垢版 |
2007/02/27(火) 22:54:58ID:???
がんばってるなあ。
おれもがんばろう。
0053nobodyさん
垢版 |
2007/02/28(水) 03:12:15ID:???
わかりにくいからWebサイトにまとめてくれ。PHP使いなんだし
00541 ◆SWtzLesEmM
垢版 |
2007/02/28(水) 20:49:38ID:???
>>53
まとめサイトを設置しました。
ttp://kameleon.s241.xrea.com/dokuwiki/doku.php
0055nobodyさん
垢版 |
2007/02/28(水) 22:48:34ID:???
最終的にMVCな構成を目標に
少しずつリファクタリングしていけばよいと思う

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

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

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

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

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



「ない!」 お勧め教えて
0070nobodyさん
垢版 |
2007/05/15(火) 16:01:33ID:???
本なんか読むよりPEARやフレームワークのソース読んで
勉強しながら自分なりに書いていけ、金かからないしだしそれが一番の近道
気が付いたらOOPなんて空気のように有って当たり前になるもんだから
0071nobodyさん
垢版 |
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の章になると意味不明
0072nobodyさん
垢版 |
2007/05/15(火) 16:08:18ID:???
書きながら次第にむかつき度が増加して誤字だらけになった(怒

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

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

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

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

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

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

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

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

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

単に、呼び出してるだけだから。 
0093nobodyさん
垢版 |
2007/06/24(日) 19:32:38ID:???
PEARをサンプルみながら見よう見まねでインスタンス作って
なんだかんだで実際動いてるんだけど何してるかイマイチ理解出来てないんだよね
functionの中でインスタンス作るとその外側ではやっぱアクセスできないのかな
PEARDBのインスタンスがあっちゃこっちゃに散らばっちゃって困る
00951 ◆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/
0096nobodyさん
垢版 |
2007/07/08(日) 18:20:46ID:XFKJF1H9
最近このスレが怖くて見れん俺ガイル
なんでそんな成長早いんだよ・・・おかしいだろ・・・orz
0097テレビできたよー
垢版 |
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 />";
  }
 }
0098テレビできたよー
垢版 |
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();
0099nobodyさん
垢版 |
2007/07/11(水) 10:41:20ID:???
例外投げるようにすれば?
01001 ◆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{ }で処理するという流れになる。

↑とのことですが、汎用性のある関数やメソッドにしたい場合、エラーが発生したときの処理を書く場所は、関数やメソッドを使う方(呼び出す側)にすることもあるでしょうか?
=戻り値をチェックするというのは、古いやり方なんでしょうか?
レスを投稿する


ニューススポーツなんでも実況