2012-01-16 34 views
4

是否有可能在PHP中實現事件驅動的程序?如何在PHP中實現事件驅動的代碼?

類似於javascript的東西。

作爲示例,嘗試打開socket(open_socket)並執行一些其他command(do_something_else)而不是等待套接字請求的成功響應。 獲得成功響應後執行callback_execute

//-------------------------------------------------------------------- 
public function open_socket(){ 
$this->socketResource = fsockopen($this->nodeIp,$this->portNumber); 
} 

public function callback_execute(){ 
fputs($this->socketResource,$command); 
} 

public function do_something_else{ xxxxx } 
//-------------------------------------------------------------------- 

Non_blocking_function($obj->open_socket(),$obj->callback_execute()); 
$obj->do_something_else(); 
+1

「實現代碼驅動程序」,你讀過自己的寫作嗎? – 2012-01-16 20:17:42

+0

[Event-Driven PHP Framework?]的可能重複(http://stackoverflow.com/questions/8856530/event-driven-php-framework)另請參閱http://stackoverflow.com/questions/6846118/event-driven -architecture-and-hook-in-php – 2012-01-16 20:17:51

+2

因爲PHP不能是多線程的,所以我會出去走一走,說「不」。可以用各種可怕的進程分叉解決方案來模擬這種情況,但是如果你想要做這樣的事情,更好的解決方案是使用可以多線程或更接近模仿它的東西,比如Java或Node.js. – DaveRandom 2012-01-16 20:18:22

回答

3

PHP中只有一個線程。因此,在等待某些事件時做一些有用的事情在PHP中是不可能的。

有些解決方法可用,但可能不太可靠 - 特別是當您計劃編寫可移植代碼時。由於語言沒有併發的概念,我認爲變通方法是有風險的。因此,最好用另一種語言(Java,Scala,...)編寫多線程代碼,並使用PHP來顯示準備好的結果(如果使用PHP來解決這些問題)。