首頁  >  文章  >  後端開發  >  實作php多執行緒類別的案例

實作php多執行緒類別的案例

黄舟
黄舟原創
2017-11-11 14:16:512397瀏覽

我們在之前給大家介紹了php多線程的實現方法,以及異步調用,都知道通過WEB服務器實現的多線程只能模仿多線程的一些效果,並不是真正意義上的多線程.但不管怎麼樣,它還是能滿足我們的一些需要的,那麼今天我們就實現php多線程的類別!

php多執行緒類別:

/** 
* @title: PHP多线程类(Thread) 
* @version: 1.0 
* 
* PHP多线程应用示例: 
* require_once 'thread.class.php'; 
* $thread = new thread(); 
* $thread->addthread('action_log','a'); 
* $thread->addthread('action_log','b'); 
* $thread->addthread('action_log','c'); 
* $thread->runthread(); 
* 
* function action_log($info) { 
* $log = 'log/' . microtime() . '.log'; 
* $txt = $info . "rnrn" . 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn"; 
* $fp = fopen($log, 'w'); 
* fwrite($fp, $txt); 
* fclose($fp); 
* } 
*/ 
class thread { 
var $hooks = array(); 
var $args = array(); 
function thread() { 
} 
function addthread($func) 
{ 
$args = array_slice(func_get_args(), 1); 
$this->hooks[] = $func; 
$this->args[] = $args; 
return true; 
} 
function runthread() 
{ 
if(isset($_GET['flag'])) 
{ 
$flag = intval($_GET['flag']); 
} 
if($flag || $flag === 0) 
{ 
call_user_func_array($this->hooks[$flag], $this->args[$flag]); 
} 
else 
{ 
for($i = 0, $size = count($this->hooks); $i < $size; $i++) 
{ 
$fp=fsockopen($_SERVER[&#39;HTTP_HOST&#39;],$_SERVER[&#39;SERVER_PORT&#39;]); 
if($fp) 
{ 
$out = "GET {$_SERVER[&#39;PHP_SELF&#39;]}?flag=$i HTTP/1.1rn"; 
$out .= "Host: {$_SERVER[&#39;HTTP_HOST&#39;]}rn"; 
$out .= "Connection: Closernrn"; 
fputs($fp,$out); 
fclose($fp); 
} 
} 
} 
} 
}

使用方法,程式碼如下:

$thread = new thread(); 
$thread->addthread(&#39;func1&#39;,&#39;info1&#39;); 
$thread->addthread(&#39;func2&#39;,&#39;info2&#39;); 
$thread->addthread(&#39;func3&#39;,&#39;info3&#39;); 
$thread->runthread();

說明:

addthread() 是新增執行緒函數,第一個參數是函數名稱,之後的參數(可選)為傳遞給指定函數的參數.

runthread() 是執行執行緒的函數.

總結:

本文給大家分享了一個php多執行緒的類,以後就不需要在去寫那麼多程式碼,下次需要的時候就可以直接呼叫了,希望可以對你有幫助!

相關推薦:

php實作非同步呼叫多執行緒的方法


php多執行緒模擬實作的三種方法介紹


php多執行緒的實作實例


#php多執行緒一種實作方法—shell

#

以上是實作php多執行緒類別的案例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn