回答編集履歴
2
コードの修正に伴い、説明文の内容も変更した
answer
CHANGED
@@ -3,22 +3,22 @@
|
|
3
3
|
|
4
4
|
先生をモチーフにして考えると、下記のような形なら理解しやすいのではないでしょうか。
|
5
5
|
|
6
|
+
**トレイトの考え方が無かった場合**
|
6
7
|
* 親クラス:「先生」
|
7
|
-
*
|
8
|
+
* 子クラス:「国語の先生」「数学の先生」「英語の先生」**「国語と英語の先生」**
|
8
|
-
* 実態:「山田さん(担当:国語)」「小池(担当:数学・英語)」
|
9
9
|
|
10
|
-
この場合。。。
|
11
|
-
* 山田さんは「先生」クラスを継承し、「国語の先生」を use することになります。
|
12
|
-
|
10
|
+
「国語と英語の先生」クラスは、「国語の先生」クラスの内容と「英語の先生」クラスの内容を再度記述する必要がある。
|
13
11
|
|
14
|
-
**トレイトの考え方が無かった場合**
|
15
|
-
小池さんは、「数学と英語の先生」クラスを新たに生成し、それを継承する。
|
16
12
|
|
17
13
|
**トレイトの場合**
|
14
|
+
* 親クラス:「先生」
|
15
|
+
* トレイト:「国語担当」「数学担当」「英語担当」
|
18
|
-
|
16
|
+
* 子クラス:「国語の先生」「数学の先生」「英語の先生」**「国語と英語の先生」**
|
19
17
|
|
20
|
-
|
18
|
+
「国語と英語の先生」クラスは、「国語担当」と「英語担当」を use すればよい。
|
21
19
|
|
20
|
+
そして、今後、「数学と英語の先生」が赴任する際は、「数学担当」と「英語担当」を use したクラスを作成する・・・ということになります。
|
21
|
+
|
22
22
|
コードとして表現する場合、下記のような形になります。
|
23
23
|
|
24
24
|
```PHP
|
1
コードを修正
answer
CHANGED
@@ -22,48 +22,63 @@
|
|
22
22
|
コードとして表現する場合、下記のような形になります。
|
23
23
|
|
24
24
|
```PHP
|
25
|
+
/*
|
26
|
+
* 親クラス
|
27
|
+
*/
|
25
28
|
class 先生 {
|
26
29
|
public function 採点() {
|
27
30
|
}
|
28
31
|
}
|
32
|
+
|
33
|
+
/* (各科目担当の定義)トレイト */
|
29
|
-
trait 数学
|
34
|
+
trait 数学担当 {
|
30
35
|
public function 数学の授業() {
|
31
36
|
}
|
32
37
|
}
|
38
|
+
|
33
|
-
trait 英語
|
39
|
+
trait 英語担当 {
|
34
40
|
public function 英語の授業() {
|
35
41
|
}
|
36
42
|
}
|
43
|
+
|
37
|
-
trait 国語
|
44
|
+
trait 国語担当 {
|
38
45
|
public function 国語の授業() {
|
39
46
|
}
|
40
47
|
}
|
41
48
|
|
49
|
+
/**
|
50
|
+
* 子クラス
|
51
|
+
*/
|
42
|
-
class
|
52
|
+
class 国語の先生 extends 先生 {
|
43
|
-
use 国語
|
53
|
+
use 国語担当;
|
44
54
|
}
|
55
|
+
|
45
|
-
class
|
56
|
+
class 数学と英語の先生 extends 先生 {
|
46
|
-
use 数学
|
57
|
+
use 数学担当;
|
47
|
-
use 英語
|
58
|
+
use 英語担当;
|
48
59
|
}
|
49
60
|
|
61
|
+
// 小池先生
|
50
|
-
$koike = new
|
62
|
+
$koike = new 数学と英語の先生();
|
51
63
|
$koike->数学の授業();
|
52
64
|
$koike->英語の授業();
|
53
65
|
$koike->採点();
|
54
66
|
|
67
|
+
// 山田先生
|
55
|
-
$yamada = new
|
68
|
+
$yamada = new 国語の先生();
|
56
69
|
$yamada->国語の授業();
|
57
70
|
$yamada->採点();
|
58
71
|
$yamada->英語の授業(); // エラー
|
59
72
|
|
60
73
|
|
74
|
+
/* ------------- 国語と英語の先生が赴任した場合 --------------- */
|
75
|
+
|
61
|
-
class
|
76
|
+
class 国語と英語の先生 extends 先生{
|
62
77
|
use 国語の先生;
|
63
78
|
use 英語の先生;
|
64
79
|
}
|
65
80
|
|
66
|
-
$newTeacher = new
|
81
|
+
$newTeacher = new 国語と英語の先生();
|
67
82
|
$newTeacher->国語の授業();
|
68
83
|
$newTeacher->英語の授業();
|
69
84
|
$newTeacher->採点();
|