Recommended
KEY
PDF
PDOでデータベース接続と SQLインジェクション対策
PDF
PDF
PDF
[Alfresco]ドキュメントライブラリのUIカスタマイズ
PDF
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
PDF
PDF
PDF
PDF
最新PHP事情 (2000年7月22日,PHPカンファレンス)
PDF
omoon.org の裏側 〜FuelPHP の task 活用例〜
PDF
FuelPHPで3種のprofilerを使ってみた
PDF
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
PDF
PDF
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
PDF
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
PPTX
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
PDF
PDF
PPT
Customization of DBIC::Schema::Loader
PDF
PDF
Rails Controller Fundamentals
PDF
20091030cakephphandson 02
PDF
PDF
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
PDF
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
PDF
PDF
More Related Content
KEY
PDF
PDOでデータベース接続と SQLインジェクション対策
PDF
PDF
PDF
[Alfresco]ドキュメントライブラリのUIカスタマイズ
PDF
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
PDF
PDF
What's hot
PDF
PDF
最新PHP事情 (2000年7月22日,PHPカンファレンス)
PDF
omoon.org の裏側 〜FuelPHP の task 活用例〜
PDF
FuelPHPで3種のprofilerを使ってみた
PDF
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
PDF
PDF
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
PDF
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
PPTX
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
PDF
PDF
PPT
Customization of DBIC::Schema::Loader
PDF
PDF
Rails Controller Fundamentals
PDF
20091030cakephphandson 02
PDF
PDF
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
PDF
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
Viewers also liked
PDF
PDF
PDF
PDF
PDF
PDF
PPT
Test Driven Development and Quality Improvement
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
Web技術勉強会9回目2(Slideshare用)
PDF
Web技術勉強会10回目(Slideshare用)
PDF
Similar to Web技術勉強会 20100925
PDF
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
PDF
WTM53 phpフレームワーク いまさらcodeigniter
PPTX
PPTX
PDF
PHPの今とこれから2025 (PHP Conference Japan 2025)
PDF
PHPの今とこれから2024 at PHP Conference Japan 2024
PDF
PDF
PDF
PDF
PDF
ODP
PDF
【アシアル塾】PHPオブジェクト指向再入門・第二回クラスの継承と委譲
PDF
PDF
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
PDF
PDF
Modern PHP Programming @ PFI Seminar
PDF
Symfony2 How to create your Bundle
PDF
PDF
More from 龍一 田中
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
PDF
Web技術勉強会 20130525 - Google Cloud Messaging入門
PDF
PDF
PDF
Web技術勉強会 20100925 1. 2. 3. 4. 5. ディレクトリ構造(一部抜粋)
/
css/
php/
func/ ... 関数群
class/ … クラスファイル群
load.php … 通常の受信処理を一括処理
ajax.php … Ajaxの受信処理を一括処理
tmpl/
index.php
6. 1. index.php(View)はController(load.php)に表示処理を依頼する
2. load.phpはリクエストパラメータから判断して処理を開始する
3. func/xxx.phpはModel(php/class)に処理を依頼する
4. Modelは処理結果をControllerに返す
5. Controllerは処理結果を加工してViewに返す
6. Viewは処理結果を表示する
7. 8. 9. 10. 改善(MVC)
Modelよりコアな層を追加
Library層を追加。ModelはLibraryに対して
(ControllerがModelへ送るように)メッセージを
送信する
Libraryは原則的に汎用性を高くする
システム専用になる場合もあり
Libraryの用途は3つ
DB処理
外部サービス処理
その他汎用的処理
11. 12. 改善(MVC)
役割分担を明確に
Controller
ロジックはかかない(分岐処理はOK)
Modelを呼ぶかViewを描画するのどちらか
Model
システム専用のロジック(SQLなど)を書く
Libraryを呼ぶかControllerに値を返すのどちらか
View
Controllerからの描画命令に従って描画するだけ
Library
DB接続などコアな処理または外部リソースにアクセ
スする。汎用性を高めている。
13. 14. ディレクトリ構造
/
controllers/
ApplicationController.php … (抽象クラス)
(各種処理ごとのController)
models/
(各種処理ごとのModel)
( Model)
views/
images/
js/
lib/
DB.php
DAO.php
etc.
15. 17. 18. 19. DB.php
private $manager = null;
private function __construct() {}
protected function getManager($dbname) {
// ここでDB接続処理(PDO)
$manager = new PDO();
return $manager;
}
ポイント:
・コンストラクタはprivateで宣言
・DB.phpは継承して使うのでインスタンスを返却するメソッド
(getManager)はprotectedで宣言
20. DAO.php
class DAO extends DB {
private static $dbaccessor = null;
private function __construct() {}
private function init() {} // 初期処理
public function getInstance() {
if (!is_object(DAO::$dbaccessor)) {
DAO::$dbaccessor = new DAO();
}
DAO::$dbaccessor->init();
return DAO::$dbaccessor;
}
// CRUDを処理するメソッドを以下に定義
}
21. DAO.php
使い方の例
$db = DAO::getInstance(); // (1)
$sql = “INSERT INTO …”;
$bind = array(“name” => “hirasawa_yui”);
$db->insert($sql, $bind);
$db2 = DAO::getInstance(); // (1)と同じObj
// $db3 = new DAO(); // エラー
// $db4 = new DB(); // エラー
22. 23. 24. ServiceAbstract.php
abstract class ServiceAbstract {
function __construct($params = array()) {
$this->prepare($params)
->fetch()
->process();
}
final public function get() {
return $this->_data;
}
abstract protected function prepare($params);
abstract protected function fetch();
abstract protected function process();
25. ServiceBookmark.php
class ServiceBookmark extends ServiceAbstract {
function __construct($params = array()) {
$this->_params = $params;
parent::__construct();
}
public function prepare($params) {
// ブクマデータ取得前処理
return $this;
}
public function fetch() {
// ブクマデータ取得処理
return $this;
}
public function process() {
// ブクマデータ加工
$this->_data = ...
}
27. 使い方の例
$hatebu = new ServiceBookmark();
$data = $hatebu->get();
$twitter = new
ServiceTwitter($param);
$data2 = $twitter->get();
ポイント:
・異なる外部サービスの処理を同じにできる。
28. 29. 具体例
$services = array("Twitter", "Blog");
foreach ($services as $service_name) {
$refClass = new ReflectionClass($service_name);
$service = $refClass->newInstance();
register($service->get());
}
ポイント:
・文字列からインスタンスが生成可能
・手続き方法が同じならループで一気に処理可能
30. 31. 32. 33. 34. 35. 36. 37. 38. こだわったところ
異なる外部サービスを同じ手続きで処理する
設計
$services = array("Twitter", "Blog");
foreach ($services as $service_name) {
$refClass = new ReflectionClass($service_name);
$service = $refClass->newInstance();
register($service->get());
}
外から見ると同じ手続き(メソッド名)だが内
部処理がすべて異なる処理を等価的に処理
条件分岐(if, switch)未使用
39. LifeStream
目的
自分の活動内容を一挙に集約すること
機能
作成したシステムへのゲートウェイ・リンク
自分が行ったPOSTを管理
Blog、Twitter、ブックマーク、その他サービス
システム監視(外部非公開)
ログ一括監視
障害監視、障害通知
40. 41. 42. 43. 44.