質問編集履歴

5

質問内容を追記しました。

2018/01/19 00:23

投稿

ID_7UGzV8hCHGs5
ID_7UGzV8hCHGs5

スコア58

test CHANGED
File without changes
test CHANGED
@@ -211,3 +211,13 @@
211
211
  */
212
212
 
213
213
  ```
214
+
215
+
216
+
217
+
218
+
219
+ #質問追記
220
+
221
+ 「そもそもThreadから配列を返すなんて処理は、普通(仕事)では書かないよ」的な意見でもぜひください。
222
+
223
+ 私は趣味でプログラムしているので、そういう最前線の言葉が凄い貴重です。

4

追加でコードを掲載しました。

2018/01/19 00:23

投稿

ID_7UGzV8hCHGs5
ID_7UGzV8hCHGs5

スコア58

test CHANGED
File without changes
test CHANGED
@@ -115,3 +115,99 @@
115
115
  #
116
116
 
117
117
  スレッドで配列を返す事が不可能なら、しぶしぶjsonで返そうかと考えております(T_T)
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+ # 追記: プロパティに格納しようとしたNGだったソースを掲載します。
126
+
127
+ ```php
128
+
129
+ <?php
130
+
131
+
132
+
133
+ $MyThread = new MyThread;
134
+
135
+ $MyThread->start();
136
+
137
+ $MyThread->join();
138
+
139
+
140
+
141
+ //1
142
+
143
+ var_dump($MyThread);
144
+
145
+ //2
146
+
147
+ var_dump($MyThread->data); //NG
148
+
149
+
150
+
151
+ class MyThread extends Thread
152
+
153
+ {
154
+
155
+ public $data;
156
+
157
+
158
+
159
+ public function __construct()
160
+
161
+ {
162
+
163
+ //処理なし
164
+
165
+ }
166
+
167
+
168
+
169
+ public function run()
170
+
171
+ {
172
+
173
+ //この配列を親スレッドで使いたい
174
+
175
+ $array = array('data1', 'data2');
176
+
177
+
178
+
179
+
180
+
181
+ //プロパティに格納 → NG
182
+
183
+ $this->data = array('data1', 'data2'); //メインスレッドに処理が戻った時に、$this->dataは既に破棄されていて、アクセス出来ない。
184
+
185
+
186
+
187
+ }
188
+
189
+ }
190
+
191
+
192
+
193
+
194
+
195
+ /* 出力結果
196
+
197
+ ▼1のvar_dump //プロパティdataは含まれていない。
198
+
199
+ /var/www/html/Arbitrage_ROOT_PATH/thread_array.php:6:
200
+
201
+ class MyThread#1 (0) {
202
+
203
+ }
204
+
205
+
206
+
207
+ ▼2のvar_dump // 既に削除されたようなエラーメッセージ
208
+
209
+ Fatal error: Uncaught RuntimeException: pthreads detected an attempt to connect to an object which has already been destroyed in /var/www/html/main.php on line 7
210
+
211
+ */
212
+
213
+ ```

3

「グローバル変数に格納」出来るかテストした旨を追記しました。

2018/01/19 00:10

投稿

ID_7UGzV8hCHGs5
ID_7UGzV8hCHGs5

スコア58

test CHANGED
File without changes
test CHANGED
@@ -12,15 +12,15 @@
12
12
 
13
13
  尚、速度を重視しているため、
14
14
 
15
- 下記のデータを受け渡し方法は、出来るだけ行いたくないと考えております。
15
+ 下記の受け渡し方法は、出来るだけ行いたくないと考えております。
16
16
 
17
17
 
18
18
 
19
19
  ・DBに保存
20
20
 
21
- ・テキストファイルへの書き出
21
+ ・テキストファイル書き出
22
22
 
23
- ・jsonにしてかえ
23
+ ・json(string)にして
24
24
 
25
25
 
26
26
 
@@ -88,6 +88,12 @@
88
88
 
89
89
 
90
90
 
91
+ //グローバル変数に格納 → NG
92
+
93
+ //$GLOBALS['myArray'] = $array; //メインスレッドに処理が戻った時に、既に破棄されていてアクセス出来ない。
94
+
95
+
96
+
91
97
  //json_encodeしてstringにする → OK
92
98
 
93
99
  //$this->data = json_encode($array); //もちろんこれは出来たのですが、$arrayは実際は大きいデータなので、json_encodeする時間が惜しいんです。

2

変数名を訂正しました

2018/01/18 23:32

投稿

ID_7UGzV8hCHGs5
ID_7UGzV8hCHGs5

スコア58

test CHANGED
File without changes
test CHANGED
@@ -78,13 +78,13 @@
78
78
 
79
79
  //プロパティに格納 → NG
80
80
 
81
- //$this->data = array('data1', 'data2'); //メインスレッドに処理が戻った時に、$this->myArrayは既に破棄されていて、アクセス出来ない。
81
+ //$this->data = array('data1', 'data2'); //メインスレッドに処理が戻った時に、$this->dataは既に破棄されていて、アクセス出来ない。
82
82
 
83
83
 
84
84
 
85
85
  //セッションに格納 → NG
86
86
 
87
- //$_SESSION['myArray'] = $array; //メインスレッドに処理が戻った時に、既に破棄されていてアクセス出来ない。
87
+ //$_SESSION['myArray'] = $array; //メインスレッドに処理が戻った時に、既に破棄されていてアクセス出来ない。
88
88
 
89
89
 
90
90
 

1

変数名が誤っていたため変更しました。

2018/01/18 16:09

投稿

ID_7UGzV8hCHGs5
ID_7UGzV8hCHGs5

スコア58

test CHANGED
File without changes
test CHANGED
@@ -78,7 +78,7 @@
78
78
 
79
79
  //プロパティに格納 → NG
80
80
 
81
- //$this->myArray = array('data1', 'data2'); //メインスレッドに処理が戻った時に、$this->myArrayは既に破棄されていて、アクセス出来ない。
81
+ //$this->data = array('data1', 'data2'); //メインスレッドに処理が戻った時に、$this->myArrayは既に破棄されていて、アクセス出来ない。
82
82
 
83
83
 
84
84