回答編集履歴
8
修正
test
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
**【調査メモ】**
|
2
|
-
|
3
|
-
**
|
1
|
+
**調査メモの続き:teratailの質問は、上限が10000文字で質問には追記できないので回答に追記します。**
|
4
2
|
|
5
3
|
|
6
4
|
|
7
修正
test
CHANGED
@@ -8,10 +8,6 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
#### 「ローカル変数」「一時的な変数」「一時的ではない変数」の違いは?
|
12
|
-
|
13
|
-
|
14
|
-
|
15
11
|
様々な変数をダンプしてみました。
|
16
12
|
|
17
13
|
|
6
読みにくいので少し修正
test
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
|
1
|
+
**【調査メモ】**
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
|
5
|
-
**
|
3
|
+
**※teratailの質問は、上限が10000文字で追記できないので、他の調査メモは回答へ追記します。 **
|
4
|
+
|
5
|
+
|
6
|
+
|
6
|
-
|
7
|
+
#【追記1】
|
7
|
-
|
8
8
|
|
9
9
|
|
10
10
|
|
@@ -176,7 +176,7 @@
|
|
176
176
|
|
177
177
|
|
178
178
|
|
179
|
-
#
|
179
|
+
#【追記2】
|
180
180
|
|
181
181
|
|
182
182
|
|
@@ -236,7 +236,7 @@
|
|
236
236
|
|
237
237
|
|
238
238
|
|
239
|
-
#
|
239
|
+
#【追記3】
|
240
240
|
|
241
241
|
|
242
242
|
|
5
少し追記
test
CHANGED
@@ -233,3 +233,15 @@
|
|
233
233
|
|`~`|Temporary variable|ZendEngine内で利用される変数|
|
234
234
|
|
235
235
|
|`$`|Variable|通常の変数|
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
### 少し追記
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
[別の質問](https://teratail.com/questions/55152)で変数値や即値に対応するzvalやHashTableはオペコード作成時またはオペコード実行時に作成されると教えて頂きました。
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
何の根拠もありませんが、オペコード作成時に確定できる変数が `ハッシュ化された変数` ではないかと考えております。例えば、`$a = 1`というのはオペコード作成時に確定できるため、`!0`となっているのかと思います。オペコード実行時にしか確定できないのは、計算結果などです。`$a + $b`のような計算結果は`~2`となっています。オペコード実行時に計算され、そのときに確定するので、このような変数が `ZendEngine内で利用される変数` ではないかと思います。他に `普通の変数` というのがありますが、いまいちわかっておりません。以上、憶測というか妄想です。
|
4
変更
test
CHANGED
@@ -176,11 +176,7 @@
|
|
176
176
|
|
177
177
|
|
178
178
|
|
179
|
-
---
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
##
|
179
|
+
## さらに追記
|
184
180
|
|
185
181
|
|
186
182
|
|
3
追記
test
CHANGED
@@ -180,7 +180,7 @@
|
|
180
180
|
|
181
181
|
|
182
182
|
|
183
|
-
### 追記
|
183
|
+
### さらに追記
|
184
184
|
|
185
185
|
|
186
186
|
|
@@ -224,7 +224,7 @@
|
|
224
224
|
|
225
225
|
|
226
226
|
|
227
|
-
まとめると下記のような感じかなと思います。(自信なし)
|
227
|
+
まとめると下記のような感じかなと思います。(自信なし^^;)
|
228
228
|
|
229
229
|
|
230
230
|
|
2
追記
test
CHANGED
@@ -173,3 +173,67 @@
|
|
173
173
|
次に `new Gamma` を処理しているようですが、先ほどの `:7` の返り値を指定することで、`$8`というローカル変数的な何かが返ってくるようです。
|
174
174
|
|
175
175
|
何と形容すればよいのかわかりませんが、`:` はクラスを取得するときに返ってくる"何か"のようです。
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
---
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
### 追記
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
`! $ ~` について参考になるものを見つけたので、追記します。
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
OpenOfficeのファイルですが、[phpopcodes_aug2008](https://wiki.php.net/_media/phpopcodes_aug2008.odp) にVLDに関しての記述があります。下記が引用です。
|
192
|
+
|
193
|
+
|
194
|
+
|
195
|
+
> ! == compiler variable
|
196
|
+
|
197
|
+
$ == variable
|
198
|
+
|
199
|
+
~ == temporary
|
200
|
+
|
201
|
+
|
202
|
+
|
203
|
+
この3つについて [第三回闇PHP勉強会開催した&PHPカンファレンスとPHPMatsuriで喋った](http://blog.anatoo.jp/entry/20121124/1353692635) に説明がありました。下記が引用です。
|
204
|
+
|
205
|
+
|
206
|
+
|
207
|
+
> ZendEngine内部で使われる変数の種類には以下の3つがあります。
|
208
|
+
|
209
|
+
>
|
210
|
+
|
211
|
+
> Variable 通常のPHPの変数
|
212
|
+
|
213
|
+
> Temporary variable ZendEngineないで利用される変数
|
214
|
+
|
215
|
+
> Compiled variable ?
|
216
|
+
|
217
|
+
>
|
218
|
+
|
219
|
+
> このうち、最初のVariableはPHPの$hogeみたいな通常の変数のことで、その次のTemporary VariableはZendEngine内部でのみ利用されるレジスタのような変数ということがわかっていたのですが、三番目のCompiled Variableというのが何のことがよくわかっていませんでした。
|
220
|
+
|
221
|
+
> これなんなのかというと、通常のPHPの変数と同じものなんですが、$hogeみたいなPHPの変数はZendEngineのハッシュテーブルの中で管理されているのですが、ハッシュテーブルなので当然格納するときは変数名がハッシュ化されます。Compiled Variableとは、実行時に変数名をハッシュ化してオーバーヘッドにならないようにコンパイル時に予めハッシュ化されるPHPの変数ということがコードを読んでわかりました。
|
222
|
+
|
223
|
+
> 確かにPHPの変数名は実行時にならないとわからない場合もありますが、$hogeみたいなコードの場合はコンパイル時に変数名もわかっているわけなので予め変数名をハッシュ化しておいたほうがオーバーヘッドが少ないということなんでしょう。
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
まとめると下記のような感じかなと思います。(自信なし)
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
|記号|用語|意味|
|
232
|
+
|
233
|
+
|:--|:--|:--|
|
234
|
+
|
235
|
+
|`!`|Compiled variable|ハッシュ化された変数|
|
236
|
+
|
237
|
+
|`~`|Temporary variable|ZendEngine内で利用される変数|
|
238
|
+
|
239
|
+
|`$`|Variable|通常の変数|
|
1
訂正
test
CHANGED
@@ -156,11 +156,11 @@
|
|
156
156
|
|
157
157
|
|:--|:--|
|
158
158
|
|
159
|
-
|`!`|グローバル変数|
|
159
|
+
|`!`|グローバル変数?|
|
160
160
|
|
161
|
-
|`~`|計算結果(一時的な変数と呼んでいいのかな?)|
|
161
|
+
|`~`|計算結果?(一時的な変数と呼んでいいのかな?)|
|
162
162
|
|
163
|
-
|`$`|ローカル変数|
|
163
|
+
|`$`|ローカル変数?|
|
164
164
|
|
165
165
|
|
166
166
|
|