回答編集履歴
4
訂正
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
そもそも、変数には、メソッド内や関数内
|
15
|
+
そもそも、変数には、メソッド内や関数内で使えるローカル変数と、
|
16
16
|
|
17
17
|
クラスに所属するメンバー変数と、
|
18
18
|
|
3
見直し
test
CHANGED
@@ -100,6 +100,54 @@
|
|
100
100
|
|
101
101
|
|
102
102
|
|
103
|
+
また、(混乱しやすいけど)このコードも実行できて、結果は0(改行)0(改行)となります。
|
104
|
+
|
105
|
+
-1なんて表示されません。
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
```php
|
110
|
+
|
111
|
+
<?php
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
class Foo {
|
116
|
+
|
117
|
+
public $val = 0;
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
public function bar() {
|
122
|
+
|
123
|
+
return $this->val;
|
124
|
+
|
125
|
+
}
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
public function baz() {
|
130
|
+
|
131
|
+
$val = -1; // ローカル変数$valに代入しているだけで、メンバー変数に介入していないことに注意。
|
132
|
+
|
133
|
+
}
|
134
|
+
|
135
|
+
}
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
$a = new Foo();
|
140
|
+
|
141
|
+
echo $a->bar() . PHP_EOL;
|
142
|
+
|
143
|
+
$a->baz();
|
144
|
+
|
145
|
+
echo $a->bar() . PHP_EOL;
|
146
|
+
|
147
|
+
```
|
148
|
+
|
149
|
+
|
150
|
+
|
103
151
|
---
|
104
152
|
|
105
153
|
|
2
見直し
test
CHANGED
@@ -132,4 +132,42 @@
|
|
132
132
|
|
133
133
|
|
134
134
|
|
135
|
+
で、わざわざ`parent::~();`なんて書いて親クラスのメソッドを呼び出せるようにしているのは、
|
136
|
+
|
137
|
+
子クラスで同名メソッドを定義し直すと、定義し直したコトしか実行しないので、
|
138
|
+
|
139
|
+
ほんのちょっと挙動を変えたいだけで同じコードをまた書き直すのを省きたいとか、
|
140
|
+
|
141
|
+
親クラスで変更を加えた場合それを子クラスにも継承したいとか、
|
142
|
+
|
143
|
+
いくつかの理由があるんだろうな。と察する。
|
144
|
+
|
145
|
+
|
146
|
+
|
135
147
|
---
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
> 3.__construct() とstaticで定義するのは、
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
のコード例を示されても、
|
156
|
+
|
157
|
+
メンバー変数とローカル変数を混同しているコードでは意味がわかりませんよ。
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
`__construct()`は、newでインスタンスが生成されるときに自動的に呼び出されるメソッド、コンストラクタです。
|
162
|
+
|
163
|
+
[PHP: コンストラクタとデストラクタ - Manual](https://www.php.net/manual/ja/language.oop5.decon.php)
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
staticをつけたメソッドは、クラスのインスタンスを生成しなくても呼べるという特徴があります。
|
168
|
+
|
169
|
+
[PHP: static キーワード - Manual](https://www.php.net/manual/ja/language.oop5.static.php)
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
もう一度情報を整理してください。
|
1
加筆修正
test
CHANGED
@@ -97,3 +97,39 @@
|
|
97
97
|
```
|
98
98
|
|
99
99
|
とするとエラーなく実行できます。(値を$valに入れていないから、実行しても何も表示しないけどね。)
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
---
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
> 2.super();
|
108
|
+
|
109
|
+
> super();の呼び出しは。子クラスに継承するときにしか使われないという
|
110
|
+
|
111
|
+
> 理解で大丈夫ですか?
|
112
|
+
|
113
|
+
> 親クラスを呼び出すことで、親クラスのメソッドやプロパティをつかえるようにしているのですか?
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
んー、子クラス内メソッドから、親クラス内メソッドを呼び出す話?
|
118
|
+
|
119
|
+
super()なんてあったかなぁ、他の言語の関数などを不用意に持ち出すと混乱するよ、注意してね。
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
子クラスを定義するときに、特に実装を書かなければ、
|
124
|
+
|
125
|
+
親クラスが持つメンバー変数やプロパティやメソッドを使えます。
|
126
|
+
|
127
|
+
ただし、アクセス権が設定されていて、子クラスで使えたり使えなかったりします。
|
128
|
+
|
129
|
+
[PHP: アクセス権 - Manual](https://www.php.net/manual/ja/language.oop5.visibility.php)
|
130
|
+
|
131
|
+
[PHPのアクセス修飾子public, protected, privateの違い | UX MILK](https://uxmilk.jp/26435)
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
---
|