Volatile
オブジェクトがThreaded
オブジェクトよりも遅いです。
Volatile
オブジェクトは、pthreads v3の配列の代わりになります。
<?php
class Test extends Thread {
public function run(){
$array = [
"Hello",
"World"
];
var_dump($array);
$this->array = $array;
var_dump($this->array);
}
}
$test = new Test();
$test->start() && $test->join();
?>
が得られます:pthreadsのは、それらがThreaded
オブジェクトのメンバーとして設定されているVolatile
オブジェクトに配列を強制変換します
は array(2) {
[0]=>
string(5) "Hello"
[1]=>
string(5) "World"
}
object(Volatile)#2 (2) {
[0]=>
string(5) "Hello"
[1]=>
string(5) "World"
}
これはThread
の実行時に期待どおりに動作する$this->array
の原因となります。
副作用は、次のコードの出力によって示される、あり:
<?php
class Test extends Thread {
public function __construct(array $array) {
$this->array = $array;
}
public function run(){
var_dump($this->array);
}
}
$array = [
"Hello",
"World"
];
$test = new Test($array);
$test->start() && $test->join();
var_dump($array);
?>
をもたらす:
object(Volatile)#2 (2) {
[0]=>
string(5) "Hello"
[1]=>
string(5) "World"
}
array(2) {
[0]=>
string(5) "Hello"
[1]=>
string(5) "World"
}
Thread
でVolatile
オブジェクトがそのarray
から切断されていることに注意をそのコンストラクタに供給されたので、主なコンテキストはまだarray
を操作しています。
自動強制変換は、Thread
が別のソースから渡された配列を操作するときに、1分あたりのwtfsを減らすのに役立ちます。
明示的に指定する方が良いです。強制に依存しないことが最善の選択肢です。
依存関係の中には配列があることが既に分かっている場合は、メンバーとして設定する前にそれを処理して、強制的に強制的に回避してください。
明示的なキャストを使用してVolatile
への自動強制を回避することが可能である:
<?php
class Test extends Thread {
public function run() {
$this->result = (array) [
"Hello" => "World"
];
}
}
$test = new Test();
$test->start() && $test->join();
var_dump($test->result);
?>
が、これはあなたが本当にしたいないときに便利ですコード例が示すように
array(1) {
["Hello"]=>
string(5) "World"
}
得られます配列を使用して結果を格納するPHP5と同様に、配列は保存用にシリアル化されます。
'add()'メソッドはありません:? – KingCrunch
@ user2058508:私は自分のPHPでpthreadsをできないようにしようとしています。しかし、それを行うことはできません。どうすればいいか教えてください。 – Cindrella