teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コードの修正に伴い、説明文の内容も変更した

2016/02/08 00:48

投稿

usk
usk

スコア397

answer CHANGED
@@ -3,22 +3,22 @@
3
3
 
4
4
  先生をモチーフにして考えると、下記のような形なら理解しやすいのではないでしょうか。
5
5
 
6
+ **トレイトの考え方が無かった場合**
6
7
  * 親クラス:「先生」
7
- * トレイト:「国語の先生」「数学の先生」「英語の先生」
8
+ * 子クラス:「国語の先生」「数学の先生」「英語の先生」**「国語と英語の先生」**
8
- * 実態:「山田さん(担当:国語)」「小池(担当:数学・英語)」
9
9
 
10
- この場合。。。
11
- * 山田さんは「先生」クラスを継承し、「国語の先生」を use することになります。
12
- * 小池さんは「先生」クラスを継承し、「数学の先生」「英語の先生」を use することになります
10
+ 国語と英語の先生」クラス、「国語の先生」クラスの内容と「英語の先生」クラスの内容再度記述する必要がある
13
11
 
14
- **トレイトの考え方が無かった場合**
15
- 小池さんは、「数学と英語の先生」クラスを新たに生成し、それを継承する。
16
12
 
17
13
  **トレイトの場合**
14
+ * 親クラス:「先生」
15
+ * トレイト:「国語担当」「数学担当」「英語担当」
18
- 小池さんは「数学の先生」「英語の先生」を use するだけで、両方の関数を利用するこができます。
16
+ * 子クラス:国語の先生」「数学の先生」「英語の先生」**「国語英語の先生」**
19
17
 
20
- そして、今後、○×先生(担当:国語英語)が赴任する際は、「先生」を継承し、「国語の先生」「英語の先生」を use すれば・・・ということになります
18
+ 国語英語先生」クラスは、「国語担当「英語担当」を use すればい。
21
19
 
20
+ そして、今後、「数学と英語の先生」が赴任する際は、「数学担当」と「英語担当」を use したクラスを作成する・・・ということになります。
21
+
22
22
  コードとして表現する場合、下記のような形になります。
23
23
 
24
24
  ```PHP

1

コードを修正

2016/02/08 00:48

投稿

usk
usk

スコア397

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 山田 extends 先生 {
52
+ class 国語の先生 extends 先生 {
43
- use 国語の先生;
53
+ use 国語担当;
44
54
  }
55
+
45
- class 小池 extends 先生 {
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 ●× extends 先生{
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->採点();