回答編集履歴
5
修正
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
大前提と補足。
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 $
|
166
|
-
|
167
|
-
public $
|
168
|
-
|
169
|
-
protected $
|
170
|
-
|
171
|
-
static $
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
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
修正
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
修正
test
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
> インスタンスが保有しているメンバを調べたかった
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
調べて何をしたいかによります。取得できるものできないものがあるので(後述)
|
2
6
|
|
3
7
|
|
4
8
|
|
1
修正
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
|
+
理由は前述のとおり。
|