回答編集履歴

5

修正

2019/04/08 00:12

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -314,10 +314,6 @@
314
314
 
315
315
  var_dump($test);
316
316
 
317
- $test->hoge();
318
-
319
- var_dump($test);
320
-
321
317
  /**
322
318
 
323
319
  new時点

4

大前提と補足。

2019/04/08 00:12

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -1,3 +1,23 @@
1
+ 大前提:
2
+
3
+ [var_dump()](https://www.php.net/manual/ja/function.var-dump.php)が返すのは`変数に関する情報`(PHPマニュアルより抜粋)です。
4
+
5
+ いわば「データ」です。
6
+
7
+ メソッドはデータを持つわけではありません。処理なので実行されて(呼び出されて)初めて仕事をします。
8
+
9
+ なので、var_dump()ではメソッドのことは何も返しません。
10
+
11
+ 返されるのは「プロパティ」のみです。
12
+
13
+
14
+
15
+ --------------
16
+
17
+
18
+
19
+
20
+
1
21
  > インスタンスが保有しているメンバを調べたかった
2
22
 
3
23
 
@@ -50,6 +70,20 @@
50
70
 
51
71
  static $d;
52
72
 
73
+
74
+
75
+ function hoge(){
76
+
77
+ $this->a = 1;
78
+
79
+ $this->b = 2;
80
+
81
+ $this->c = 3;
82
+
83
+ self::$d = 4;
84
+
85
+ }
86
+
53
87
  }
54
88
 
55
89
 
@@ -74,8 +108,6 @@
74
108
 
75
109
  }
76
110
 
77
-
78
-
79
111
  **/
80
112
 
81
113
  ```
@@ -112,9 +144,21 @@
112
144
 
113
145
  static $d;
114
146
 
147
+
148
+
149
+ function hoge(){
150
+
151
+ $this->a = 1;
152
+
153
+ $this->b = 2;
154
+
155
+ $this->c = 3;
156
+
157
+ self::$d = 4;
158
+
115
- }
159
+ }
160
+
116
-
161
+ }
117
-
118
162
 
119
163
  $test = new test;
120
164
 
@@ -146,9 +190,7 @@
146
190
 
147
191
 
148
192
 
149
- タイトルで気づきました。
150
-
151
- 単純に変数・メソッドを取りたいなら。
193
+ 単純に変数・メソッドを取りたいなら下記
152
194
 
153
195
  - [get_class_methods()](https://www.php.net/manual/ja/function.get-class-methods.php)
154
196
 
@@ -158,38 +200,162 @@
158
200
 
159
201
  <?php
160
202
 
203
+ class test{
204
+
205
+ private $pa;
206
+
207
+ public $pb;
208
+
209
+ protected $pc;
210
+
211
+ static $pd;
212
+
213
+ function a(){}
214
+
215
+ protected function b(){}
216
+
217
+ private function c(){}
218
+
219
+ static function d(){}
220
+
221
+ }
222
+
223
+
224
+
225
+ var_dump(get_class_methods('test'));
226
+
227
+ var_dump(get_class_vars('test'));
228
+
229
+ /**
230
+
231
+ array(2) {
232
+
233
+ [0]=>
234
+
235
+ string(1) "a"
236
+
237
+ [1]=>
238
+
239
+ string(1) "d"
240
+
241
+ }
242
+
243
+ array(2) {
244
+
245
+ ["pb"]=>
246
+
247
+ NULL
248
+
249
+ ["pd"]=>
250
+
251
+ NULL
252
+
253
+ }
254
+
255
+ **/
256
+
257
+ ```
258
+
259
+
260
+
261
+ ※いずれにしても「宣言されているプロパティ/メソッドのうち、現在のスコープから見えるもの」です。
262
+
263
+ 理由は前述のとおり。
264
+
265
+
266
+
267
+ 蛇足:
268
+
269
+ メソッドを実行した後のオブジェクトをvar_dump()すれば、実行後の値がとれます。
270
+
271
+ ※[別質問](https://teratail.com/questions/182972)でメソッド実行後にオブジェクトが持つ値が変更される現象の再現
272
+
273
+ ```php
274
+
161
275
  <?php
162
276
 
163
277
  class test{
164
278
 
165
- private $pa;
166
-
167
- public $pb;
168
-
169
- protected $pc;
170
-
171
- static $pd;
172
-
173
- function a(){}
174
-
175
- protected function b(){}
176
-
177
- private function c(){}
178
-
179
- static function d(){}
180
-
181
- }
182
-
183
-
184
-
185
- var_dump(get_class_methods('test'));
186
-
187
- var_dump(get_class_vars('test'));
188
-
189
- ```
190
-
191
-
192
-
193
- ※いずれにしても「宣言されているプロパティ/メソッドのうち、現在のスコープから見えるもの」です。
194
-
195
- 理由は前述のとおり。
279
+ private $a;
280
+
281
+ public $b;
282
+
283
+ protected $c;
284
+
285
+ static $d;
286
+
287
+
288
+
289
+ function hoge(){
290
+
291
+ $this->a = 1;
292
+
293
+ $this->b = 2;
294
+
295
+ $this->c = 3;
296
+
297
+ self::$d = 4;
298
+
299
+ }
300
+
301
+ }
302
+
303
+ $test = new test;
304
+
305
+ echo 'new時点'.PHP_EOL;
306
+
307
+ var_dump($test);
308
+
309
+
310
+
311
+ $test->hoge();
312
+
313
+ echo 'hoge実行後'.PHP_EOL;
314
+
315
+ var_dump($test);
316
+
317
+ $test->hoge();
318
+
319
+ var_dump($test);
320
+
321
+ /**
322
+
323
+ new時点
324
+
325
+ object(test)#1 (3) {
326
+
327
+ ["a":"test":private]=>
328
+
329
+ NULL
330
+
331
+ ["b"]=>
332
+
333
+ NULL
334
+
335
+ ["c":protected]=>
336
+
337
+ NULL
338
+
339
+ }
340
+
341
+ hoge実行後
342
+
343
+ object(test)#1 (3) {
344
+
345
+ ["a":"test":private]=>
346
+
347
+ int(1)
348
+
349
+ ["b"]=>
350
+
351
+ int(2)
352
+
353
+ ["c":protected]=>
354
+
355
+ int(3)
356
+
357
+ }
358
+
359
+ **/
360
+
361
+ ```

3

修正

2019/04/08 00:01

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -140,6 +140,12 @@
140
140
 
141
141
 
142
142
 
143
+
144
+
145
+ ------
146
+
147
+
148
+
143
149
  タイトルで気づきました。
144
150
 
145
151
  単純に変数・メソッドを取りたいなら。

2

修正

2019/04/07 12:25

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -1,4 +1,8 @@
1
1
  > インスタンスが保有しているメンバを調べたかった
2
+
3
+
4
+
5
+ 調べて何をしたいかによります。取得できるものできないものがあるので(後述)
2
6
 
3
7
 
4
8
 

1

修正

2019/04/07 12:24

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -88,8 +88,6 @@
88
88
 
89
89
  ------
90
90
 
91
- 蛇足:
92
-
93
91
  「プロパティ取得して何かで使いたい」のであればvar_dump()より[get_object_vars()](https://www.php.net/manual/ja/function.get-object-vars.php)のほうがいいかもしれませんね。
94
92
 
95
93
  privateとかprotectedとか、インスタンス化したところ(要は外部)直接扱えないものを取得しても何もならないので。
@@ -135,3 +133,53 @@
135
133
  **/
136
134
 
137
135
  ```
136
+
137
+
138
+
139
+ タイトルで気づきました。
140
+
141
+ 単純に変数・メソッドを取りたいなら。
142
+
143
+ - [get_class_methods()](https://www.php.net/manual/ja/function.get-class-methods.php)
144
+
145
+ - [get_class_vars()](https://www.php.net/manual/ja/function.get-class-vars.php)
146
+
147
+ ```php
148
+
149
+ <?php
150
+
151
+ <?php
152
+
153
+ class test{
154
+
155
+ private $pa;
156
+
157
+ public $pb;
158
+
159
+ protected $pc;
160
+
161
+ static $pd;
162
+
163
+ function a(){}
164
+
165
+ protected function b(){}
166
+
167
+ private function c(){}
168
+
169
+ static function d(){}
170
+
171
+ }
172
+
173
+
174
+
175
+ var_dump(get_class_methods('test'));
176
+
177
+ var_dump(get_class_vars('test'));
178
+
179
+ ```
180
+
181
+
182
+
183
+ ※いずれにしても「宣言されているプロパティ/メソッドのうち、現在のスコープから見えるもの」です。
184
+
185
+ 理由は前述のとおり。