2017-09-25 3 views
0

最近、私はPHPでマルチスレッドを研究し始めました。私はそれが致命的なエラーを与える通常のクラスで同じロジックを適用した場合、私は以下のコードpthreadsのスレッドクラスがオブジェクトを配列として扱う方法

<?php 
$safe = new Threaded(); 

while (count($safe) < 10) { 
    $safe[] = count($safe); 
} 

var_dump($safe->chunk(5)); 

に配列としてどのようにスレッドクラスの使用目的興味があります。

Fatal error: Cannot use object of type XYZ as array 
+0

実際のエラーですか、XYZが別のものに置き換えられていますか? – GrumpyCrouton

+0

まあ、私は通常のクラスを作ることによって実験していたし、配列として使用し、エラーを得た –

答えて

0

PHPは、カスタムクラスはforeachループで動作することを可能にするIteratorインターフェース、などあなたが

  • 現在のすべての5つの列挙されたインターフェイスメソッドを実装する必要が

    を提供

  • キー
  • 次へ
  • rewind
  • 有効

まさに何あなたがこれらのメソッドのそれぞれの内部で行うことは、完全にあなた次第です - 一般的に、彼らは、オブジェクトにそれ以外のプライベートな配列を露出させ、または/ etcをいくつかの追加のフィルタリングを提供するために使用しています。ドキュメントにはたくさんの例があります。

このようなオブジェクトは、iterator_to_array関数を使用して、ネイティブ配列にコピーされた反復可能なコンテンツを持つことができます。

pthreadsのThreadedクラスの場合は、内部のPHPクラスで、Traversableインターフェイスを直接実装しています。これはユーザーランドでは不可能です。

関連する問題