SlideShare a Scribd company logo
1 of 25
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. 継承ではなく委譲という選択肢があることを理解する
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
継承とは
クラスのプロパティ・メソッドを受け継いで新しいクラスを作成する仕組みです
• 元になるクラスを親クラス・基底クラス・スーパークラスなどと呼びます
• 新しいクラスを子クラス・サブクラス・派生クラスなどと呼びます
継承のメリット
• 親クラスの機能を再利用することができます
記述方法
• クラスを定義する際に「extends」で親クラスを指定します
プロパティ・メソッドのオーバーライド(上書き)
• protectedやpublicなものは子クラスでオーバーライドが可能です
• privateなものはオーバーライドすることができません
注意点
• 単純に機能を再利用したいだけの場合、継承ではなく委譲を検討して下さい
詳しくは後半の委譲で解説します
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 5
Personを継承してEmployeeを定義する
Personクラスを親クラスとして「Employee」という子クラスを作成します
• Employeeの仕様
給与を受け取ることができます
給与は勤続年数に応じて昇給します
プロパティ名やメソッド名の仕様
– 次に紹介する「クラス図」にて確認します
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 6
クラス図とは
クラス図とは?
• クラスを分かりやすく表現するための設計図
クラスのメソッド名やプロパティ名を表現できます
継承や委譲の関係を表現できます
• クラス図はUML(統一モデリング言語)で規定されています
モデリングとは?
• 対象を分かりやすく表現するための技術
オブジェクト指向の世界ではUMLが利用されています
– クラス図はUML2.0で規定された13種類の図の内の一つです
データベースのテーブル構造を表現するためのモデルとしてはER図というものが利用されています
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 7
PersonとEmployeeのクラス図
記号の意味
• アクセス修飾子
「-」はprivate 「+」はpublicを表します。protectedは「#」になります。
• 継承
継承の関係は矢印で表すことができます
継承 (extends)
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 8
【実習】Personクラスの作成
Person.phpを作成します
<?php
class Person
{
private $name = '';
public function __construct($name)
{
$this->setName($name);
}
public function setName($name)
{
$this->name = trim($name);
}
public function getName()
{
return $this->name;
}
public function sayHello() {
echo 'こんにちは、' . $this->name . 'です。';
}
}
Person.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 9
【実習】Employeeクラスの作成
Employeeを作成します
<?php
class Employee extends Person
{
private $base_salary = 200000;
private $annual_pay_rise = 10000;
private $service_years = 0;
public function __construct($name, $service_years)
{
$this->setName($name);
$this->setServiceYears($service_years);
}
public function setServiceYears($service_years)
{
$this->service_years = $service_years;
}
public function getSalary()
{
$salary = $this->base_salary + ($this->annual_pay_rise * $this->service_years);
return $salary;
}
public function displaySalary()
{
echo $this->getName(). "さんの給与は" . number_format($this->getSalary()) . "円です";
}
}
Employee.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 10
【実習】Employeeオブジェクトの作成
Employeeを呼び出します
<?php
require_once('Person.php');
require_once('Employee.php');
$taro = new Employee('アシアル太郎', 10);
$taro->displaySalary();
employee_client.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 11
継承のポイント
継承のポイント
• EmployeeはPersonの機能を利用することができます
setName()メソッドを再利用して名前をセットすることができます
– $this->nameはprivateのため、Employeeから直接変更することはできません。
• オーバーライド
EmployeeはPersonの機能をオーバーライドすることができます
今回は__constructメソッドをオーバーライドしています
– 親クラスの__constructは呼ばれなくなります
親クラスのprivateなメソッドはオーバーライドすることができません
オーバーライドしていても子クラスから親クラスのメソッドを呼びだすことは可能です
– 例えば、子クラスの__construct()中で親クラスの__construct()も呼び出せます
» 親クラスのメソッドを呼びたい場合は parent::__construct(); のように記述します。
注意事項
• メソッドから直接echoなどで出力するとエスケープ処理やテストが大変になるので避けましょう。
getXXXのように値をreturnで返すようにします。
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 12
委譲とは
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 13
委譲とは
委譲(delegation)
• あるクラスの処理の一部を「別のクラスに任せる」こと
• 例えばアプリケーション全体を管理するApplicationクラスがあったと仮定
「ログを出力する」という処理が必要な場合
– 具体的な処理はApplicationクラス内には直接記述しない
– Loggerクラスを実装し、具体的な処理はそのクラスに任せる(委譲する)
• ApplicationとLoggerの関連を表したクラス図
委譲のメリット
• クラスの役割分担を行うことができる
巨大なクラスができてしまうことを防ぐことができる
Loggerを別のApplicationで再利用することも可能
関連(has)
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 14
【実習】ApplicationとLoggerを実装しよう
Application
<?php
class Application
{
private $logger;
public function setLogger(FileLogger $logger)
{
$this->logger = $logger;
}
public function log($message)
{
$this->logger->log($message);
}
}
Application.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 15
【実習】ApplicationとLoggerを実装しよう
FileLogger(Logger)
<?php
class FileLogger
{
private $path = '';
public function __construct($path)
{
$this->setPath($path);
}
public function setPath($path)
{
$this->path = $path;
}
public function log($message)
{
file_put_contents($this->path, $message . PHP_EOL, FILE_APPEND);
}
}
FileLogger.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 16
【実習】ApplicationとLoggerを実装しよう
<?php
require_once('FileLogger.php');
require_once('Application.php');
$logger = new FileLogger('/tmp/log.txt');
$app = new Application();
$app->setLogger($logger);
$app->log('アプリケーション起動');
$app->log('処理を受け付けました');
$app->log('アプリケーション終了');
application_client.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 17
継承と委譲の使い分け
継承を使う場合
• 子クラスが親クラスに対して is-a関係になる場合
Employee is a Person
• logメソッドを再利用したいという理由だけで継承を利用してはいけない
Application is a logger (NG!)
委譲を使う場合
• 再利用したいクラスに対して has-a関係になる場合
Application has a Logger
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 18
【発展的な内容】
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 19
オブジェクトの型判定
オブジェクトの判定が必要な理由
• 特定のオブジェクトを必要とする処理を行う場合、オブジェクトの型を判定す
る必要があります。
判定方法
• instanceof演算子
オブジェクトが特定のクラスに属しているかどうかを判定します
• タイプヒンティング
関数やメソッドの引数で受け取ることのできる値を、特定のクラスに属している
オブジェクトだけに制限します
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 20
オブジェクトの型判定方法
instanceof
• instanceof 演算子でクラスを指定する
タイプヒンティング
• 関数やメソッドを定義する際、引数名とセットでクラス名を指定する
public function setLogger(FileLogger $logger)
{
$this->logger = $logger;
}
<?php
require_once('Person.php');
require_once('Employee.php');
$taro = new Person('太郎');
$hanako = new Employee('花子');
var_dump($taro instanceof Person);
var_dump($hanako instanceof Person); // 花子は従業員かつ人間でもあるのでtrueになる
var_dump($taro instanceof Employee); // 太郎は従業員ではないのでfalseになる
var_dump($hanako instanceof Employee);
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 21
【発展課題】継承
EmployeeでsayHello()メソッドをオーバーライドしてみよう
Employeeを更に継承して新しいクラスを定義してみましょう
• 仕様例:Programmerクラス
ソースコードを記述することができる
年功序列ではなく違う指標で給与が決まる
クラス図を書いてみよう
• 今日利用したクラス図を書いてみる
• Employeeを継承した新しいクラスのクラス図を書いてみよう
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 22
【CM】アシアルスクール
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 23
アシアル塾のご案内
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. │ 24
アシアルスクールのご案内
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. │ 25
企業研修のご案内
アシアルではWeb技術に関する企業研修を行っています
• 技術職採用の社員に向けた新人研修・中途採用者向け研修
• 総合職向けのWeb技術入門研修
主な実績
• グリー株式会社様
• 株式会社ドワンゴ様
• 株式会社朝日新聞社様
URL
• http://www.asial.co.jp/business/training/

More Related Content

What's hot

ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?Yoshitaka Kawashima
 
図書館でAPIをスルメのように 味わうには
図書館でAPIをスルメのように 味わうには図書館でAPIをスルメのように 味わうには
図書館でAPIをスルメのように 味わうにはTakanori Hayashi
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説するTaishiYamada1
 
第7回WBAシンポジウム:予測符号化モデルとしての 深層予測学習とロボット知能化
第7回WBAシンポジウム:予測符号化モデルとしての 深層予測学習とロボット知能化第7回WBAシンポジウム:予測符号化モデルとしての 深層予測学習とロボット知能化
第7回WBAシンポジウム:予測符号化モデルとしての 深層予測学習とロボット知能化The Whole Brain Architecture Initiative
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
[DL輪読会]A System for General In-Hand Object Re-Orientation
[DL輪読会]A System for General In-Hand Object Re-Orientation[DL輪読会]A System for General In-Hand Object Re-Orientation
[DL輪読会]A System for General In-Hand Object Re-OrientationDeep Learning JP
 
AutoGluonではじめるAutoML
AutoGluonではじめるAutoMLAutoGluonではじめるAutoML
AutoGluonではじめるAutoML西岡 賢一郎
 
ロジカルプレゼンテーション
ロジカルプレゼンテーションロジカルプレゼンテーション
ロジカルプレゼンテーションAya Kaino
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスターUnity Technologies Japan K.K.
 
データベース入門
データベース入門データベース入門
データベース入門拓 小林
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?増田 亨
 
Laravel aspectで関心の分離
Laravel aspectで関心の分離Laravel aspectで関心の分離
Laravel aspectで関心の分離Kenjiro Kubota
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築Masashi Shinbara
 
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計するドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する増田 亨
 
PowerApps アプリ開発入門
PowerApps アプリ開発入門PowerApps アプリ開発入門
PowerApps アプリ開発入門Yoshitaka Seo
 

What's hot (20)

ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
 
図書館でAPIをスルメのように 味わうには
図書館でAPIをスルメのように 味わうには図書館でAPIをスルメのように 味わうには
図書館でAPIをスルメのように 味わうには
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
 
第7回WBAシンポジウム:予測符号化モデルとしての 深層予測学習とロボット知能化
第7回WBAシンポジウム:予測符号化モデルとしての 深層予測学習とロボット知能化第7回WBAシンポジウム:予測符号化モデルとしての 深層予測学習とロボット知能化
第7回WBAシンポジウム:予測符号化モデルとしての 深層予測学習とロボット知能化
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
[DL輪読会]A System for General In-Hand Object Re-Orientation
[DL輪読会]A System for General In-Hand Object Re-Orientation[DL輪読会]A System for General In-Hand Object Re-Orientation
[DL輪読会]A System for General In-Hand Object Re-Orientation
 
AutoGluonではじめるAutoML
AutoGluonではじめるAutoMLAutoGluonではじめるAutoML
AutoGluonではじめるAutoML
 
ロジカルプレゼンテーション
ロジカルプレゼンテーションロジカルプレゼンテーション
ロジカルプレゼンテーション
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
 
SwiftのDI方法につい て最近考えてた話
SwiftのDI方法につい て最近考えてた話SwiftのDI方法につい て最近考えてた話
SwiftのDI方法につい て最近考えてた話
 
データベース入門
データベース入門データベース入門
データベース入門
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
Laravel aspectで関心の分離
Laravel aspectで関心の分離Laravel aspectで関心の分離
Laravel aspectで関心の分離
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計するドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
 
PowerApps アプリ開発入門
PowerApps アプリ開発入門PowerApps アプリ開発入門
PowerApps アプリ開発入門
 

Viewers also liked

【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理
【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理
【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理アシアル株式会社
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクトアシアル株式会社
 
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LTichikaway
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話infinite_loop
 
機械学習を学ぶための準備 その4 (行列の掛け算について) 試験問題 解答
機械学習を学ぶための準備 その4  (行列の掛け算について) 試験問題 解答機械学習を学ぶための準備 その4  (行列の掛け算について) 試験問題 解答
機械学習を学ぶための準備 その4 (行列の掛け算について) 試験問題 解答NHN テコラス株式会社
 
私はこうやってSlackを社内で流行らせました
私はこうやってSlackを社内で流行らせました私はこうやってSlackを社内で流行らせました
私はこうやってSlackを社内で流行らせましたNHN テコラス株式会社
 

Viewers also liked (6)

【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理
【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理
【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
 
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
 
機械学習を学ぶための準備 その4 (行列の掛け算について) 試験問題 解答
機械学習を学ぶための準備 その4  (行列の掛け算について) 試験問題 解答機械学習を学ぶための準備 その4  (行列の掛け算について) 試験問題 解答
機械学習を学ぶための準備 その4 (行列の掛け算について) 試験問題 解答
 
私はこうやってSlackを社内で流行らせました
私はこうやってSlackを社内で流行らせました私はこうやってSlackを社内で流行らせました
私はこうやってSlackを社内で流行らせました
 

Similar to 【アシアル塾】PHPオブジェクト指向再入門・第二回クラスの継承と委譲

書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)アシアル株式会社
 
Clojureコレクションで探るimmutableでpersistentな世界
Clojureコレクションで探るimmutableでpersistentな世界Clojureコレクションで探るimmutableでpersistentな世界
Clojureコレクションで探るimmutableでpersistentな世界Kent Ohashi
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶShumpei Shiraishi
 
Library login
Library loginLibrary login
Library loginJun Chiba
 
Active Object
Active ObjectActive Object
Active Objecty-uti
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例sohta
 
pi-17. プログラム設計
pi-17. プログラム設計pi-17. プログラム設計
pi-17. プログラム設計kunihikokaneko1
 
Spath for enterprise
Spath for enterpriseSpath for enterprise
Spath for enterpriseKoichiro Sumi
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortemtamtam180
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!Shohei Okada
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624Yusuke Suzuki
 
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方Shunji Konishi
 
試して学べるクラウド技術! Eucalyptus/AeolusConductor
試して学べるクラウド技術! Eucalyptus/AeolusConductor試して学べるクラウド技術! Eucalyptus/AeolusConductor
試して学べるクラウド技術! Eucalyptus/AeolusConductorEtsuji Nakai
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeKen Morishita
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 

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

書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
 
Clojureコレクションで探るimmutableでpersistentな世界
Clojureコレクションで探るimmutableでpersistentな世界Clojureコレクションで探るimmutableでpersistentな世界
Clojureコレクションで探るimmutableでpersistentな世界
 
Reservation
ReservationReservation
Reservation
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
 
Library login
Library loginLibrary login
Library login
 
Active Object
Active ObjectActive Object
Active Object
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
 
pi-17. プログラム設計
pi-17. プログラム設計pi-17. プログラム設計
pi-17. プログラム設計
 
Spath for enterprise
Spath for enterpriseSpath for enterprise
Spath for enterprise
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方
 
試して学べるクラウド技術! Eucalyptus/AeolusConductor
試して学べるクラウド技術! Eucalyptus/AeolusConductor試して学べるクラウド技術! Eucalyptus/AeolusConductor
試して学べるクラウド技術! Eucalyptus/AeolusConductor
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
 
GraphQL入門
GraphQL入門GraphQL入門
GraphQL入門
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 
Fork/Join Framework
Fork/Join FrameworkFork/Join Framework
Fork/Join Framework
 
Modeling Workshop
Modeling WorkshopModeling Workshop
Modeling Workshop
 

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両対応アプリを開発 アシアル株式会社
 
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アシアル株式会社
 
創業明治33年の衣料卸問屋がﰀ アプリで挑むコミュニケーション変革 ﰀ ~MonacaとmBaaSを活用したﰀ ビジネスチャットアプリの紹介〜 ﰀ
創業明治33年の衣料卸問屋がﰀ アプリで挑むコミュニケーション変革 ﰀ ~MonacaとmBaaSを活用したﰀ ビジネスチャットアプリの紹介〜 ﰀ創業明治33年の衣料卸問屋がﰀ アプリで挑むコミュニケーション変革 ﰀ ~MonacaとmBaaSを活用したﰀ ビジネスチャットアプリの紹介〜 ﰀ
創業明治33年の衣料卸問屋がﰀ アプリで挑むコミュニケーション変革 ﰀ ~MonacaとmBaaSを活用したﰀ ビジネスチャットアプリの紹介〜 ﰀアシアル株式会社
 

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両対応アプリを開発
 
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
 
創業明治33年の衣料卸問屋がﰀ アプリで挑むコミュニケーション変革 ﰀ ~MonacaとmBaaSを活用したﰀ ビジネスチャットアプリの紹介〜 ﰀ
創業明治33年の衣料卸問屋がﰀ アプリで挑むコミュニケーション変革 ﰀ ~MonacaとmBaaSを活用したﰀ ビジネスチャットアプリの紹介〜 ﰀ創業明治33年の衣料卸問屋がﰀ アプリで挑むコミュニケーション変革 ﰀ ~MonacaとmBaaSを活用したﰀ ビジネスチャットアプリの紹介〜 ﰀ
創業明治33年の衣料卸問屋がﰀ アプリで挑むコミュニケーション変革 ﰀ ~Monacaと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. 継承ではなく委譲という選択肢があることを理解する
  • 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 継承とは クラスのプロパティ・メソッドを受け継いで新しいクラスを作成する仕組みです • 元になるクラスを親クラス・基底クラス・スーパークラスなどと呼びます • 新しいクラスを子クラス・サブクラス・派生クラスなどと呼びます 継承のメリット • 親クラスの機能を再利用することができます 記述方法 • クラスを定義する際に「extends」で親クラスを指定します プロパティ・メソッドのオーバーライド(上書き) • protectedやpublicなものは子クラスでオーバーライドが可能です • privateなものはオーバーライドすることができません 注意点 • 単純に機能を再利用したいだけの場合、継承ではなく委譲を検討して下さい 詳しくは後半の委譲で解説します
  • 5. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 5 Personを継承してEmployeeを定義する Personクラスを親クラスとして「Employee」という子クラスを作成します • Employeeの仕様 給与を受け取ることができます 給与は勤続年数に応じて昇給します プロパティ名やメソッド名の仕様 – 次に紹介する「クラス図」にて確認します
  • 6. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 6 クラス図とは クラス図とは? • クラスを分かりやすく表現するための設計図 クラスのメソッド名やプロパティ名を表現できます 継承や委譲の関係を表現できます • クラス図はUML(統一モデリング言語)で規定されています モデリングとは? • 対象を分かりやすく表現するための技術 オブジェクト指向の世界ではUMLが利用されています – クラス図はUML2.0で規定された13種類の図の内の一つです データベースのテーブル構造を表現するためのモデルとしてはER図というものが利用されています
  • 7. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 7 PersonとEmployeeのクラス図 記号の意味 • アクセス修飾子 「-」はprivate 「+」はpublicを表します。protectedは「#」になります。 • 継承 継承の関係は矢印で表すことができます 継承 (extends)
  • 8. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 8 【実習】Personクラスの作成 Person.phpを作成します <?php class Person { private $name = ''; public function __construct($name) { $this->setName($name); } public function setName($name) { $this->name = trim($name); } public function getName() { return $this->name; } public function sayHello() { echo 'こんにちは、' . $this->name . 'です。'; } } Person.php
  • 9. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 9 【実習】Employeeクラスの作成 Employeeを作成します <?php class Employee extends Person { private $base_salary = 200000; private $annual_pay_rise = 10000; private $service_years = 0; public function __construct($name, $service_years) { $this->setName($name); $this->setServiceYears($service_years); } public function setServiceYears($service_years) { $this->service_years = $service_years; } public function getSalary() { $salary = $this->base_salary + ($this->annual_pay_rise * $this->service_years); return $salary; } public function displaySalary() { echo $this->getName(). "さんの給与は" . number_format($this->getSalary()) . "円です"; } } Employee.php
  • 10. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 10 【実習】Employeeオブジェクトの作成 Employeeを呼び出します <?php require_once('Person.php'); require_once('Employee.php'); $taro = new Employee('アシアル太郎', 10); $taro->displaySalary(); employee_client.php
  • 11. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 11 継承のポイント 継承のポイント • EmployeeはPersonの機能を利用することができます setName()メソッドを再利用して名前をセットすることができます – $this->nameはprivateのため、Employeeから直接変更することはできません。 • オーバーライド EmployeeはPersonの機能をオーバーライドすることができます 今回は__constructメソッドをオーバーライドしています – 親クラスの__constructは呼ばれなくなります 親クラスのprivateなメソッドはオーバーライドすることができません オーバーライドしていても子クラスから親クラスのメソッドを呼びだすことは可能です – 例えば、子クラスの__construct()中で親クラスの__construct()も呼び出せます » 親クラスのメソッドを呼びたい場合は parent::__construct(); のように記述します。 注意事項 • メソッドから直接echoなどで出力するとエスケープ処理やテストが大変になるので避けましょう。 getXXXのように値をreturnで返すようにします。
  • 12. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 12 委譲とは
  • 13. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 13 委譲とは 委譲(delegation) • あるクラスの処理の一部を「別のクラスに任せる」こと • 例えばアプリケーション全体を管理するApplicationクラスがあったと仮定 「ログを出力する」という処理が必要な場合 – 具体的な処理はApplicationクラス内には直接記述しない – Loggerクラスを実装し、具体的な処理はそのクラスに任せる(委譲する) • ApplicationとLoggerの関連を表したクラス図 委譲のメリット • クラスの役割分担を行うことができる 巨大なクラスができてしまうことを防ぐことができる Loggerを別のApplicationで再利用することも可能 関連(has)
  • 14. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 14 【実習】ApplicationとLoggerを実装しよう Application <?php class Application { private $logger; public function setLogger(FileLogger $logger) { $this->logger = $logger; } public function log($message) { $this->logger->log($message); } } Application.php
  • 15. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 15 【実習】ApplicationとLoggerを実装しよう FileLogger(Logger) <?php class FileLogger { private $path = ''; public function __construct($path) { $this->setPath($path); } public function setPath($path) { $this->path = $path; } public function log($message) { file_put_contents($this->path, $message . PHP_EOL, FILE_APPEND); } } FileLogger.php
  • 16. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 16 【実習】ApplicationとLoggerを実装しよう <?php require_once('FileLogger.php'); require_once('Application.php'); $logger = new FileLogger('/tmp/log.txt'); $app = new Application(); $app->setLogger($logger); $app->log('アプリケーション起動'); $app->log('処理を受け付けました'); $app->log('アプリケーション終了'); application_client.php
  • 17. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 17 継承と委譲の使い分け 継承を使う場合 • 子クラスが親クラスに対して is-a関係になる場合 Employee is a Person • logメソッドを再利用したいという理由だけで継承を利用してはいけない Application is a logger (NG!) 委譲を使う場合 • 再利用したいクラスに対して has-a関係になる場合 Application has a Logger
  • 18. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 18 【発展的な内容】
  • 19. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 19 オブジェクトの型判定 オブジェクトの判定が必要な理由 • 特定のオブジェクトを必要とする処理を行う場合、オブジェクトの型を判定す る必要があります。 判定方法 • instanceof演算子 オブジェクトが特定のクラスに属しているかどうかを判定します • タイプヒンティング 関数やメソッドの引数で受け取ることのできる値を、特定のクラスに属している オブジェクトだけに制限します
  • 20. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 20 オブジェクトの型判定方法 instanceof • instanceof 演算子でクラスを指定する タイプヒンティング • 関数やメソッドを定義する際、引数名とセットでクラス名を指定する public function setLogger(FileLogger $logger) { $this->logger = $logger; } <?php require_once('Person.php'); require_once('Employee.php'); $taro = new Person('太郎'); $hanako = new Employee('花子'); var_dump($taro instanceof Person); var_dump($hanako instanceof Person); // 花子は従業員かつ人間でもあるのでtrueになる var_dump($taro instanceof Employee); // 太郎は従業員ではないのでfalseになる var_dump($hanako instanceof Employee);
  • 21. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 21 【発展課題】継承 EmployeeでsayHello()メソッドをオーバーライドしてみよう Employeeを更に継承して新しいクラスを定義してみましょう • 仕様例:Programmerクラス ソースコードを記述することができる 年功序列ではなく違う指標で給与が決まる クラス図を書いてみよう • 今日利用したクラス図を書いてみる • Employeeを継承した新しいクラスのクラス図を書いてみよう
  • 22. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 22 【CM】アシアルスクール
  • 23. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 23 アシアル塾のご案内 1回3,000円でWeb技術を約90分学習できる格安の教育サービスです • 60分の講義+30分の復習&質問タイム 主な対象 • IT業界やWeb業界で働いているプロの方の学習を応援します! Webデザイナーの方大歓迎 • 技術を分かりやすく教えます 絶対理解保証キャンペーン実施中 • もし講義内容にご満足いただけなかった場合は返金いたします (返金手数料のみ頂戴いたします) URL • http://www.asial.co.jp/school/juku.php
  • 24. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 24 アシアルスクールのご案内 Web関連技術を集中的かつ体系的に学べる研修サービスです • 半日∼二日間の集中講義を中心に実施 • PHPやJavaScript、LinuxといったWeb関連技術が学べます URL • http://www.asial.co.jp/school/guide.php 例:PHP講座の学習ロードマップ
  • 25. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 25 企業研修のご案内 アシアルではWeb技術に関する企業研修を行っています • 技術職採用の社員に向けた新人研修・中途採用者向け研修 • 総合職向けのWeb技術入門研修 主な実績 • グリー株式会社様 • 株式会社ドワンゴ様 • 株式会社朝日新聞社様 URL • http://www.asial.co.jp/business/training/