2015-09-23 7 views
5

どのようにカスタムクラスを作成するのはコンポーネントクラスを拡張しないのですか?yii2でスレッドを拡張するカスタムクラスを作成

クラス:

namespace common\components; 

class AsyncOperation extends Thread { 

    public function __construct($arg) { 
    $this->arg = $arg; 
} 

public function run() { 
    if ($this->arg) { 
     $sleep = mt_rand(1, 10); 
     printf('%s: %s -start -sleeps %d' . "<br />", date("g:i:sa"),  $this->arg, $sleep); 
     sleep($sleep); 
     printf('%s: %s -finish' . "<br />", date("g:i:sa"), $this->arg); 
     } 
    } 

} 

yii2コン​​トローラ:

public function actionTest() { 
    // Create a array 
    $stack = array(); 

//Iniciate Miltiple Thread 
    foreach (range("A", "D") as $i) { 
     $stack[] = new AsyncOperation($i); 
    } 

    // Start The Threads 
    foreach ($stack as $t) { 
     $t->start(); 
    } 
} 

エラー:

PHP Fatal Error – yii\base\ErrorException 
Class 'common\components\Thread' not found 

This class is working perfect in pure php app
And Pthread is installed!

答えて

6

SomethingクラスSomething現在の南で検索することを意味拡張しますエスケープ。 \Somethingは、クラスがルート名前空間で検索されることを意味します。 basics of namespacesを参照してください。

名前空間には、クラスcommon\components\Threadがありません。あなたのケースでの使用にはclass AsyncOperation extends \Thread {

1

誰かが既にあなたが...しかし...

を探していた答えを与えた私はあなたのスレッドでマークアップしている気づき、およびWebフレームワークを使用しています。

私はあなたのWebアプリケーションのフロントエンドで、Webサーバーの内部にスレッドを作成していると仮定します:This is a terrible idea

最新のpthreads prohibit execution inside a web serverのリリースでは、PHP7とpthreadsを使いたい場合には別の方法が必要になります。これは間もなくpthreadsを使用する唯一のサポートされた方法です。

+0

いいえ、それはちょうどテストですが、私はyii2の安らかなAPIのバックエンドでそれを使用しています! – mohsen

+0

ああ私の神様、私は本当に嬉しいです、私は実際に泣くことができました... –

+0

どういう意味ですか? – mohsen

関連する問題