SlideShare a Scribd company logo
1 of 26
Download to read offline
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 1
PHPオブジェクト指向再入門
クラスとオブジェクト
1回3,000円のWeb技術教育・アシアル塾
http://www.asial.co.jp/school/juku.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 2
本講座の目的
本講座の目的
• 書籍だけでは理解することが難しいオブジェクト指向の技術や考え方を、ひとつずつ理解していきます。
受講対象者
• プログラミングの基本的な手法である構造化プログラミング(順次・反復・分岐)や変数・関数の仕組みを理
解している方
第一回目(クラスとオブジェクト)の目標
1. クラスとオブジェクトの違いを理解する
2. 自分の手でクラスを定義してオブジェクトを生成する
3. アクセサメソッドの重要性について理解する
4. PHPで提供されているクラスやオブジェクトを利用する
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 3
オブジェクト指向とは?
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 4
オブジェクト指向とは
オブジェクト指向とは?
• プログラミング手法の一つです
• システム全体を「個々の役割を持ったオブジェクトの集まり」としてとらえる考え方・仕組み
オブジェクト指向を学ぶメリット
• クラスライブラリやフレームワークといった資産を利用することができます
• ソースコードの品質を高めることができます
学習上の課題
• 用語が多く、混乱しやすい
• 抽象的な思考を求められるので理解するのが大変
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 5
手続き型とオブジェクト指向の比較
役割がクラスに分かれている = 再利用や修正が簡単。
大規模開発やチーム開発に最適。
関数
関数
関数 データ
関数
データ
データ
関数
クラスA クラスB
関数
関数
データ データ
データ 関数
関数
関数
DB処理 メール処理
役
割
分
担
が
明
確
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 6
オブジェクト指向のアイディアはシンプル
オブジェクト指向のアイデアは簡単
• 1960年代のシミュレーション言語(Simula)から生まれた
オブジェクト指向のアイデア
• オブジェクトがそれぞれ役割分担をして仕事をこなす
• 互いにメッセージを送受しあうことで、全体として処理を達成する
オブジェクトがチームプレーを行う
オブジェクトとは何か?
• プロパティ(属性)を持っている
データ、変数
• メソッド(振る舞い)を持っている
処理、関数
objectA objectB
objectC
objectD
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 7
オブジェクトの作り方
オブジェクトの作り方
• オブジェクトを作るためには、設計図としてclassを定義する必要があります。
PHPがすでに用意しているclassも存在します。それらを利用する場合は定義不要です。
• クラス(class)は関数(function)を作るときと同じようなイメージで定義することができる
classでは複数のプロパティ(属性)とメソッド(振る舞い)を定義することができます
– つまり、複数の変数と関数をまとめて持つことができます
クラス(class)とは?
• オブジェクトを作成するための設計図です
• クラスを定義することでプロパティの異なる複数のオブジェクトを生成することができます
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 8
クラスとオブジェクト
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 9
【実習】クラスを定義してオブジェクトを生成する
クラスの定義
解説
• $thisは自分自身のオブジェクトを表します
• public は変数やメソッドに対するアクセス権を設定しています
※アクセス権については後程解説いたします
<?php
class Person // 人を表すクラス
{
public $name = ''; // 名前を記憶するプロパティ
public function sayHello() // あいさつするメソッド
{
echo 'こんにちは、' . $this->name . 'です。';
}
}
Person.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 10
【実習】クラスを定義してオブジェクトを生成する
オブジェクトの生成とプロパティ・メソッドの利用
解説
• オブジェクトの生成
オブジェクトを生成するには、newに続けてクラス名を指定します
– $object = new クラス名();とすると、生成されたオブジェクトを変数にセットできます
• プロパティの変更
$object->プロパティ名 = 'foo' とすると、オブジェクトのプロパティを変更できます
echo $object->プロパティ名 とすると、オブジェクトのプロパティを画面に出力できます
• メソッドの呼び出し
$object->メソッド名() とするとオブジェクトのメソッドを実行できます
<?php
require_once('Person.php');
$taro = new Person(); // newでオブジェクトを作成します
$taro->name = 'アシアル太郎'; // name属性の値を変更します
$taro->sayHello(); // 「こんにちは、アシアル太郎です。」と出力されます
index.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 11
クラス定義に必要な知識と考え方
カプセル化(隠ぺい化)を行う
• 他のクラスや処理からアクセスされたくないプロパティやメソッドを隠す
アクセス権を設定する
• アクセサメソッドを用意する
コンストラクタを活用する
クラス名の付け方を意識する
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 12
アクセス修飾子
アクセス修飾子の種類
• publicとprivate、protectedの3種類存在します。
public の場合、どこからでもアクセス可能です
• $taro = new Person();
• $taro->name = 'アシアル太郎'; // publicプロパティなのでOK
private の場合、同一クラス内からのみアクセス可能です
• $taro = new Person();
• $taro->name = 'アシアル太郎'; // privateプロパティなのでエラー
$taro->setName('アシアル太郎'); // publicなアクセサメソッドを経由すればOK
protected の場合、同一クラス内と子クラス内のみアクセス可能です
• privateの範囲に加え、そのクラスを継承した子クラスからもアクセス可能
• 継承については次の回を目途に解説
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 13
【実習】プロパティをprivateに設定する
Person.phpを改造します
解説
• $name プロパティをprivateに設定します
• 外部から$nameを設定できるようにsetName()メソッドを追加します
<?php
class Person
{
private $name = '';
public function setName($name)
{
$this->name = trim($name);
}
public function sayHello()
{
echo 'こんにちは、' . $this->name . 'です。';
}
}
Person.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 14
【実習】アクセサメソッドを利用する
index.phpを改造します。
<?php
require_once('Person.php');
$taro = new Person();
$taro->setName('アシアル太郎');
$taro->sayHello();
index.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 15
アクセサメソッド
アクセサメソッドとは
• プロパティに間接的にアクセスするためのメソッドです
プロパティにアクセスしたい場合に用意します
• アクセサメソッドを通すことで入力チェックや値の整形処理を行うことができます
値を変更するメソッドをセッターと呼びます
値を取得するメソッドをゲッターと呼びます
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 16
カプセル化のまとめ
カプセル化とは、プロパティ・メソッドを隠すことです
• プロパティをprivateにして不正な変更からオブジェクトを守ります
• 外から呼ばれると困る内部処理メソッドもprivateにして守りましょう
内部処理のためのメソッドをprivateにする理由
• クラスの利用者側の責任範囲を小さくできる
publicになっているメソッドだけ理解すればよくなる
• メソッドを修正する際、影響範囲を内部に限定できる
privateなメソッドは変更の影響が内部に限定できるためメンテナンスしやすくなります
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 17
コンストラクタを活用する
コンストラクタとは
• インスタンス化の際に自動的に呼び出される初期化メソッド
• __construct というメソッド名で定義できます
constructの意味は組み立てる・構成するという意味です
• プロパティの初期化などに利用します
デストラクタというものもあります
• __destruct()
• スクリプトの終了時やオブジェクトを参照可能な変数がひとつもなくなった時
に呼び出されます。
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 18
【実習】コンストラクタを利用する
Person.phpを改造します
<?php
class Person // アクセス修飾子の例
{
private $name = '';
public function __construct($name)
{
$this->setName($name);
}
public function __destruct()
{
echo 'さようなら';
}
public function setName($name)
{
$this->name = trim($name);
}
public function sayHello() { // あいさつするメソッド (publicなのでどこからでも呼べる)
echo 'こんにちは、' . $this->name . 'です。';
}
}
Person.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 19
【実習】コンストラクタを利用する
index.phpを改造します。ついでに複数のオブジェクトを作成しましょう。
<?php
require_once('Person.php');
$taro = new Person('アシアル太郎');
$hanako = new Person('アシアル花子');
$taro->sayHello();
$hanako->sayHello();
index.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 20
クラス名の付け方
クラス名は名詞にします
クラスが何の役割を表すのかを明確に表しましょう
• User
• Item
• Mail
現実上のものではなく、特定の処理を担うようなクラスは、動詞を名詞化したクラ
ス名をつけましょう
• 読み込む: read -> CsvFileReader
• 制御する: control -> OrderController
• 管理する: manage -> ConnectionManager
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 21
メソッド名の付け方
メソッド名は動詞で始めましょう
• save()
• getParameter($name)
• findByUserName($userName)
boolean (true/false) を返すメソッド名はisやhasで始める
• isAvailable()
• isDisabled()
• hasParameter($name)
命名ルールを決めておくと可読性が向上し、クラスの振る舞いや目的が分かりやす
くなります
• Itemクラス、isAvailable()
• Databaseクラス、connect()
• Userクラス、isLoggedIn()
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 22
【発展】SimpleXMLを利用してみよう
SimpleXML
• XMLをオブジェクトに変換できる拡張モジュールです
• RSS情報などを簡単に扱えます
• http://php.net/manual/ja/book.simplexml.php
以下のソースコードを参考に、好きなサイトのRSS情報を表示してみてください
• コメントを外すとオブジェクトのdump結果が確認できます
<?php
$rss = simplexml_load_file('http://blog.asial.co.jp/rss/rss2.0.php');
// var_dump($rss);
// var_dump(get_class_methods($rss));
foreach ($rss->channel->item as $item) {
echo htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8')."<br>¥n";
// var_dump($item->guid->attributes());
}
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 23
【CM】アシアルスクール
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 24
アシアル塾のご案内
1回3,000円でWeb技術を約90分学習できる格安の教育サービスです
• 60分の講義+30分の復習&質問タイム
主な対象
• IT業界やWeb業界で働いているプロの方の学習を応援します!
Webデザイナーの方大歓迎
• 技術を分かりやすく教えます
絶対理解保証キャンペーン実施中
• もし講義内容にご満足いただけなかった場合は返金いたします
(返金手数料のみ頂戴いたします)
URL
• http://www.asial.co.jp/school/juku.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 25
アシアルスクールのご案内
Web関連技術を集中的かつ体系的に学べる研修サービスです
• 半日∼二日間の集中講義を中心に実施
• PHPやJavaScript、LinuxといったWeb関連技術が学べます
URL
• http://www.asial.co.jp/school/guide.php
例:PHP講座の学習ロードマップ
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 26
企業研修のご案内
アシアルではWeb技術に関する企業研修を行っています
• 技術職採用の社員に向けた新人研修・中途採用者向け研修
• 総合職向けのWeb技術入門研修
主な実績
• グリー株式会社様
• 株式会社ドワンゴ様
• 株式会社朝日新聞社様
URL
• http://www.asial.co.jp/business/training/

More Related Content

What's hot

ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~Akabane Hiroyuki
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925龍一 田中
 
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたMoriyoshi Koizumi
 
Php5 4勉強会
Php5 4勉強会Php5 4勉強会
Php5 4勉強会Yuji Otani
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話infinite_loop
 
SlowQueryとの戦い
SlowQueryとの戦いSlowQueryとの戦い
SlowQueryとの戦いKen Gotoh
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?kwatch
 
06 オブジェクト指向の基礎
06 オブジェクト指向の基礎06 オブジェクト指向の基礎
06 オブジェクト指向の基礎文樹 高橋
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言Yuya Takeyama
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012Yusuke Ando
 
Symfony2 How to create your Bundle
Symfony2 How to create your BundleSymfony2 How to create your Bundle
Symfony2 How to create your Bundlechobi e
 
Perl 6 Object-Oliented Programming
Perl 6 Object-Oliented ProgrammingPerl 6 Object-Oliented Programming
Perl 6 Object-Oliented Programmingrisou
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!Yuji Nojima
 
Webシステム脆弱性LT資料
Webシステム脆弱性LT資料Webシステム脆弱性LT資料
Webシステム脆弱性LT資料Tomohito Adachi
 
Gen-Template-for-Perl
Gen-Template-for-PerlGen-Template-for-Perl
Gen-Template-for-Perlnasneg
 
Deep dive into oss written in swift
Deep dive into oss written in swiftDeep dive into oss written in swift
Deep dive into oss written in swiftYuki Asai
 
20091030cakephphandson 02
20091030cakephphandson 0220091030cakephphandson 02
20091030cakephphandson 02Yusuke Ando
 
JavaScriptの落とし穴
JavaScriptの落とし穴JavaScriptの落とし穴
JavaScriptの落とし穴ikdysfm
 

What's hot (20)

ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
 
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
 
Php5 4勉強会
Php5 4勉強会Php5 4勉強会
Php5 4勉強会
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
 
SlowQueryとの戦い
SlowQueryとの戦いSlowQueryとの戦い
SlowQueryとの戦い
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
06 オブジェクト指向の基礎
06 オブジェクト指向の基礎06 オブジェクト指向の基礎
06 オブジェクト指向の基礎
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
 
PHP7を魔改造した話
PHP7を魔改造した話PHP7を魔改造した話
PHP7を魔改造した話
 
Symfony2 How to create your Bundle
Symfony2 How to create your BundleSymfony2 How to create your Bundle
Symfony2 How to create your Bundle
 
Perl 6 Object-Oliented Programming
Perl 6 Object-Oliented ProgrammingPerl 6 Object-Oliented Programming
Perl 6 Object-Oliented Programming
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!
 
Webシステム脆弱性LT資料
Webシステム脆弱性LT資料Webシステム脆弱性LT資料
Webシステム脆弱性LT資料
 
Gen-Template-for-Perl
Gen-Template-for-PerlGen-Template-for-Perl
Gen-Template-for-Perl
 
Deep dive into oss written in swift
Deep dive into oss written in swiftDeep dive into oss written in swift
Deep dive into oss written in swift
 
20091030cakephphandson 02
20091030cakephphandson 0220091030cakephphandson 02
20091030cakephphandson 02
 
JavaScriptの落とし穴
JavaScriptの落とし穴JavaScriptの落とし穴
JavaScriptの落とし穴
 

Similar to 【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト

Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門Kohki Miki
 
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...Shohei Okada
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)Rui Hirokawa
 
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングpi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングkunihikokaneko1
 
Doctrineではじめるsymfony1.2開発
Doctrineではじめるsymfony1.2開発Doctrineではじめるsymfony1.2開発
Doctrineではじめるsymfony1.2開発Katsuhiro Ogawa
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12kenjis
 
Best practice laravel
Best practice laravelBest practice laravel
Best practice laravelRisa Ohnishi
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するkwatch
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会Yuji Otani
 
Cakephpstudy5 hacks jp
Cakephpstudy5 hacks jpCakephpstudy5 hacks jp
Cakephpstudy5 hacks jpHiroki Shimizu
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向azuma satoshi
 
意図を表現するプログラミング
意図を表現するプログラミング意図を表現するプログラミング
意図を表現するプログラミングAtsuhiro Kubo
 
WordPress テーマ作成&PHP超入門
WordPress テーマ作成&PHP超入門WordPress テーマ作成&PHP超入門
WordPress テーマ作成&PHP超入門Michinari Odajima
 

Similar to 【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト (20)

Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門
 
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングpi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
 
Doctrineではじめるsymfony1.2開発
Doctrineではじめるsymfony1.2開発Doctrineではじめるsymfony1.2開発
Doctrineではじめるsymfony1.2開発
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
理科大勉強会2
理科大勉強会2理科大勉強会2
理科大勉強会2
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
Best practice laravel
Best practice laravelBest practice laravel
Best practice laravel
 
Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
 
はじめてのPowerShell
はじめてのPowerShellはじめてのPowerShell
はじめてのPowerShell
 
20180123 power shell
20180123 power shell20180123 power shell
20180123 power shell
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
 
Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
Cakephpstudy5 hacks jp
Cakephpstudy5 hacks jpCakephpstudy5 hacks jp
Cakephpstudy5 hacks jp
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向
 
意図を表現するプログラミング
意図を表現するプログラミング意図を表現するプログラミング
意図を表現するプログラミング
 
WordPress テーマ作成&PHP超入門
WordPress テーマ作成&PHP超入門WordPress テーマ作成&PHP超入門
WordPress テーマ作成&PHP超入門
 

More from アシアル株式会社

Monacaによるモバイルアプリ開発ことはじめ
Monacaによるモバイルアプリ開発ことはじめMonacaによるモバイルアプリ開発ことはじめ
Monacaによるモバイルアプリ開発ことはじめアシアル株式会社
 
kintone 連携スマホアプリの開発・配布体験
kintone 連携スマホアプリの開発・配布体験kintone 連携スマホアプリの開発・配布体験
kintone 連携スマホアプリの開発・配布体験アシアル株式会社
 
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)アシアル株式会社
 
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)アシアル株式会社
 
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)アシアル株式会社
 
Onsen UI 2 開発における JS フレームワーク衝突事例集
Onsen UI 2 開発における JS フレームワーク衝突事例集Onsen UI 2 開発における JS フレームワーク衝突事例集
Onsen UI 2 開発における JS フレームワーク衝突事例集アシアル株式会社
 
Web標準技術で iOS、Android両対応アプリを開発
Web標準技術でiOS、Android両対応アプリを開発Web標準技術でiOS、Android両対応アプリを開発
Web標準技術で iOS、Android両対応アプリを開発 アシアル株式会社
 
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)アシアル株式会社
 
Onsen UI の最近とこれから 〜 国内サポートはじめました
Onsen UI の最近とこれから 〜 国内サポートはじめましたOnsen UI の最近とこれから 〜 国内サポートはじめました
Onsen UI の最近とこれから 〜 国内サポートはじめましたアシアル株式会社
 
Monaca事例から学ぶHTML5モバイルアプリの活用ポイント
Monaca事例から学ぶHTML5モバイルアプリの活用ポイントMonaca事例から学ぶHTML5モバイルアプリの活用ポイント
Monaca事例から学ぶHTML5モバイルアプリの活用ポイントアシアル株式会社
 
最新UIフレームワーク Onsen UI2で カッコイイWordPress連携アプリを作る方法
最新UIフレームワーク Onsen UI2でカッコイイWordPress連携アプリを作る方法最新UIフレームワーク Onsen UI2でカッコイイWordPress連携アプリを作る方法
最新UIフレームワーク Onsen UI2で カッコイイWordPress連携アプリを作る方法アシアル株式会社
 
モバイル用Webフレームワーク最前線
モバイル用Webフレームワーク最前線モバイル用Webフレームワーク最前線
モバイル用Webフレームワーク最前線アシアル株式会社
 
Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621アシアル株式会社
 

More from アシアル株式会社 (20)

MonacaとEducation活動の紹介
MonacaとEducation活動の紹介MonacaとEducation活動の紹介
MonacaとEducation活動の紹介
 
PWA 4 Business
PWA 4 BusinessPWA 4 Business
PWA 4 Business
 
Monacaによるモバイルアプリ開発ことはじめ
Monacaによるモバイルアプリ開発ことはじめMonacaによるモバイルアプリ開発ことはじめ
Monacaによるモバイルアプリ開発ことはじめ
 
kintone 連携スマホアプリの開発・配布体験
kintone 連携スマホアプリの開発・配布体験kintone 連携スマホアプリの開発・配布体験
kintone 連携スマホアプリの開発・配布体験
 
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
 
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
 
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
 
Onsen UI 2 開発における JS フレームワーク衝突事例集
Onsen UI 2 開発における JS フレームワーク衝突事例集Onsen UI 2 開発における JS フレームワーク衝突事例集
Onsen UI 2 開発における JS フレームワーク衝突事例集
 
Web標準技術で iOS、Android両対応アプリを開発
Web標準技術でiOS、Android両対応アプリを開発Web標準技術でiOS、Android両対応アプリを開発
Web標準技術で iOS、Android両対応アプリを開発
 
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
 
Cordovaの特徴と開発手法概要
Cordovaの特徴と開発手法概要Cordovaの特徴と開発手法概要
Cordovaの特徴と開発手法概要
 
Html5/JSモバイルアプリ最前線
Html5/JSモバイルアプリ最前線Html5/JSモバイルアプリ最前線
Html5/JSモバイルアプリ最前線
 
Onsen UI の最近とこれから 〜 国内サポートはじめました
Onsen UI の最近とこれから 〜 国内サポートはじめましたOnsen UI の最近とこれから 〜 国内サポートはじめました
Onsen UI の最近とこれから 〜 国内サポートはじめました
 
Monaca事例から学ぶHTML5モバイルアプリの活用ポイント
Monaca事例から学ぶHTML5モバイルアプリの活用ポイントMonaca事例から学ぶHTML5モバイルアプリの活用ポイント
Monaca事例から学ぶHTML5モバイルアプリの活用ポイント
 
最新UIフレームワーク Onsen UI2で カッコイイWordPress連携アプリを作る方法
最新UIフレームワーク Onsen UI2でカッコイイWordPress連携アプリを作る方法最新UIフレームワーク Onsen UI2でカッコイイWordPress連携アプリを作る方法
最新UIフレームワーク Onsen UI2で カッコイイWordPress連携アプリを作る方法
 
Gartner summit 2016
Gartner summit 2016Gartner summit 2016
Gartner summit 2016
 
モバイル用Webフレームワーク最前線
モバイル用Webフレームワーク最前線モバイル用Webフレームワーク最前線
モバイル用Webフレームワーク最前線
 
Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621
 
20160308seminar2
20160308seminar220160308seminar2
20160308seminar2
 
Nifty cloud mbaas
Nifty cloud mbaasNifty cloud mbaas
Nifty cloud mbaas
 

【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト

  • 1. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 1 PHPオブジェクト指向再入門 クラスとオブジェクト 1回3,000円のWeb技術教育・アシアル塾 http://www.asial.co.jp/school/juku.php
  • 2. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 2 本講座の目的 本講座の目的 • 書籍だけでは理解することが難しいオブジェクト指向の技術や考え方を、ひとつずつ理解していきます。 受講対象者 • プログラミングの基本的な手法である構造化プログラミング(順次・反復・分岐)や変数・関数の仕組みを理 解している方 第一回目(クラスとオブジェクト)の目標 1. クラスとオブジェクトの違いを理解する 2. 自分の手でクラスを定義してオブジェクトを生成する 3. アクセサメソッドの重要性について理解する 4. PHPで提供されているクラスやオブジェクトを利用する
  • 3. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 3 オブジェクト指向とは?
  • 4. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 4 オブジェクト指向とは オブジェクト指向とは? • プログラミング手法の一つです • システム全体を「個々の役割を持ったオブジェクトの集まり」としてとらえる考え方・仕組み オブジェクト指向を学ぶメリット • クラスライブラリやフレームワークといった資産を利用することができます • ソースコードの品質を高めることができます 学習上の課題 • 用語が多く、混乱しやすい • 抽象的な思考を求められるので理解するのが大変
  • 5. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 5 手続き型とオブジェクト指向の比較 役割がクラスに分かれている = 再利用や修正が簡単。 大規模開発やチーム開発に最適。 関数 関数 関数 データ 関数 データ データ 関数 クラスA クラスB 関数 関数 データ データ データ 関数 関数 関数 DB処理 メール処理 役 割 分 担 が 明 確
  • 6. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 6 オブジェクト指向のアイディアはシンプル オブジェクト指向のアイデアは簡単 • 1960年代のシミュレーション言語(Simula)から生まれた オブジェクト指向のアイデア • オブジェクトがそれぞれ役割分担をして仕事をこなす • 互いにメッセージを送受しあうことで、全体として処理を達成する オブジェクトがチームプレーを行う オブジェクトとは何か? • プロパティ(属性)を持っている データ、変数 • メソッド(振る舞い)を持っている 処理、関数 objectA objectB objectC objectD
  • 7. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 7 オブジェクトの作り方 オブジェクトの作り方 • オブジェクトを作るためには、設計図としてclassを定義する必要があります。 PHPがすでに用意しているclassも存在します。それらを利用する場合は定義不要です。 • クラス(class)は関数(function)を作るときと同じようなイメージで定義することができる classでは複数のプロパティ(属性)とメソッド(振る舞い)を定義することができます – つまり、複数の変数と関数をまとめて持つことができます クラス(class)とは? • オブジェクトを作成するための設計図です • クラスを定義することでプロパティの異なる複数のオブジェクトを生成することができます
  • 8. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 8 クラスとオブジェクト
  • 9. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 9 【実習】クラスを定義してオブジェクトを生成する クラスの定義 解説 • $thisは自分自身のオブジェクトを表します • public は変数やメソッドに対するアクセス権を設定しています ※アクセス権については後程解説いたします <?php class Person // 人を表すクラス { public $name = ''; // 名前を記憶するプロパティ public function sayHello() // あいさつするメソッド { echo 'こんにちは、' . $this->name . 'です。'; } } Person.php
  • 10. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 10 【実習】クラスを定義してオブジェクトを生成する オブジェクトの生成とプロパティ・メソッドの利用 解説 • オブジェクトの生成 オブジェクトを生成するには、newに続けてクラス名を指定します – $object = new クラス名();とすると、生成されたオブジェクトを変数にセットできます • プロパティの変更 $object->プロパティ名 = 'foo' とすると、オブジェクトのプロパティを変更できます echo $object->プロパティ名 とすると、オブジェクトのプロパティを画面に出力できます • メソッドの呼び出し $object->メソッド名() とするとオブジェクトのメソッドを実行できます <?php require_once('Person.php'); $taro = new Person(); // newでオブジェクトを作成します $taro->name = 'アシアル太郎'; // name属性の値を変更します $taro->sayHello(); // 「こんにちは、アシアル太郎です。」と出力されます index.php
  • 11. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 11 クラス定義に必要な知識と考え方 カプセル化(隠ぺい化)を行う • 他のクラスや処理からアクセスされたくないプロパティやメソッドを隠す アクセス権を設定する • アクセサメソッドを用意する コンストラクタを活用する クラス名の付け方を意識する
  • 12. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 12 アクセス修飾子 アクセス修飾子の種類 • publicとprivate、protectedの3種類存在します。 public の場合、どこからでもアクセス可能です • $taro = new Person(); • $taro->name = 'アシアル太郎'; // publicプロパティなのでOK private の場合、同一クラス内からのみアクセス可能です • $taro = new Person(); • $taro->name = 'アシアル太郎'; // privateプロパティなのでエラー $taro->setName('アシアル太郎'); // publicなアクセサメソッドを経由すればOK protected の場合、同一クラス内と子クラス内のみアクセス可能です • privateの範囲に加え、そのクラスを継承した子クラスからもアクセス可能 • 継承については次の回を目途に解説
  • 13. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 13 【実習】プロパティをprivateに設定する Person.phpを改造します 解説 • $name プロパティをprivateに設定します • 外部から$nameを設定できるようにsetName()メソッドを追加します <?php class Person { private $name = ''; public function setName($name) { $this->name = trim($name); } public function sayHello() { echo 'こんにちは、' . $this->name . 'です。'; } } Person.php
  • 14. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 14 【実習】アクセサメソッドを利用する index.phpを改造します。 <?php require_once('Person.php'); $taro = new Person(); $taro->setName('アシアル太郎'); $taro->sayHello(); index.php
  • 15. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 15 アクセサメソッド アクセサメソッドとは • プロパティに間接的にアクセスするためのメソッドです プロパティにアクセスしたい場合に用意します • アクセサメソッドを通すことで入力チェックや値の整形処理を行うことができます 値を変更するメソッドをセッターと呼びます 値を取得するメソッドをゲッターと呼びます
  • 16. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 16 カプセル化のまとめ カプセル化とは、プロパティ・メソッドを隠すことです • プロパティをprivateにして不正な変更からオブジェクトを守ります • 外から呼ばれると困る内部処理メソッドもprivateにして守りましょう 内部処理のためのメソッドをprivateにする理由 • クラスの利用者側の責任範囲を小さくできる publicになっているメソッドだけ理解すればよくなる • メソッドを修正する際、影響範囲を内部に限定できる privateなメソッドは変更の影響が内部に限定できるためメンテナンスしやすくなります
  • 17. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 17 コンストラクタを活用する コンストラクタとは • インスタンス化の際に自動的に呼び出される初期化メソッド • __construct というメソッド名で定義できます constructの意味は組み立てる・構成するという意味です • プロパティの初期化などに利用します デストラクタというものもあります • __destruct() • スクリプトの終了時やオブジェクトを参照可能な変数がひとつもなくなった時 に呼び出されます。
  • 18. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 18 【実習】コンストラクタを利用する Person.phpを改造します <?php class Person // アクセス修飾子の例 { private $name = ''; public function __construct($name) { $this->setName($name); } public function __destruct() { echo 'さようなら'; } public function setName($name) { $this->name = trim($name); } public function sayHello() { // あいさつするメソッド (publicなのでどこからでも呼べる) echo 'こんにちは、' . $this->name . 'です。'; } } Person.php
  • 19. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 19 【実習】コンストラクタを利用する index.phpを改造します。ついでに複数のオブジェクトを作成しましょう。 <?php require_once('Person.php'); $taro = new Person('アシアル太郎'); $hanako = new Person('アシアル花子'); $taro->sayHello(); $hanako->sayHello(); index.php
  • 20. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 20 クラス名の付け方 クラス名は名詞にします クラスが何の役割を表すのかを明確に表しましょう • User • Item • Mail 現実上のものではなく、特定の処理を担うようなクラスは、動詞を名詞化したクラ ス名をつけましょう • 読み込む: read -> CsvFileReader • 制御する: control -> OrderController • 管理する: manage -> ConnectionManager
  • 21. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 21 メソッド名の付け方 メソッド名は動詞で始めましょう • save() • getParameter($name) • findByUserName($userName) boolean (true/false) を返すメソッド名はisやhasで始める • isAvailable() • isDisabled() • hasParameter($name) 命名ルールを決めておくと可読性が向上し、クラスの振る舞いや目的が分かりやす くなります • Itemクラス、isAvailable() • Databaseクラス、connect() • Userクラス、isLoggedIn()
  • 22. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 22 【発展】SimpleXMLを利用してみよう SimpleXML • XMLをオブジェクトに変換できる拡張モジュールです • RSS情報などを簡単に扱えます • http://php.net/manual/ja/book.simplexml.php 以下のソースコードを参考に、好きなサイトのRSS情報を表示してみてください • コメントを外すとオブジェクトのdump結果が確認できます <?php $rss = simplexml_load_file('http://blog.asial.co.jp/rss/rss2.0.php'); // var_dump($rss); // var_dump(get_class_methods($rss)); foreach ($rss->channel->item as $item) { echo htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8')."<br>¥n"; // var_dump($item->guid->attributes()); }
  • 23. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 23 【CM】アシアルスクール
  • 24. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 24 アシアル塾のご案内 1回3,000円でWeb技術を約90分学習できる格安の教育サービスです • 60分の講義+30分の復習&質問タイム 主な対象 • IT業界やWeb業界で働いているプロの方の学習を応援します! Webデザイナーの方大歓迎 • 技術を分かりやすく教えます 絶対理解保証キャンペーン実施中 • もし講義内容にご満足いただけなかった場合は返金いたします (返金手数料のみ頂戴いたします) URL • http://www.asial.co.jp/school/juku.php
  • 25. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 25 アシアルスクールのご案内 Web関連技術を集中的かつ体系的に学べる研修サービスです • 半日∼二日間の集中講義を中心に実施 • PHPやJavaScript、LinuxといったWeb関連技術が学べます URL • http://www.asial.co.jp/school/guide.php 例:PHP講座の学習ロードマップ
  • 26. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 26 企業研修のご案内 アシアルではWeb技術に関する企業研修を行っています • 技術職採用の社員に向けた新人研修・中途採用者向け研修 • 総合職向けのWeb技術入門研修 主な実績 • グリー株式会社様 • 株式会社ドワンゴ様 • 株式会社朝日新聞社様 URL • http://www.asial.co.jp/business/training/