回答編集履歴

4

訂正

2020/02/28 09:21

投稿

退会済みユーザー
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
 
14
14
 
15
- そもそも、変数には、メソッド内や関数内やブロック内で使えるローカル変数と、
15
+ そもそも、変数には、メソッド内や関数内で使えるローカル変数と、
16
16
 
17
17
  クラスに所属するメンバー変数と、
18
18
 

3

見直し

2020/02/28 09:21

投稿

退会済みユーザー
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

見直し

2020/02/28 09:07

投稿

退会済みユーザー
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

加筆修正

2020/02/28 09:02

投稿

退会済みユーザー
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
+ ---