首頁 >後端開發 >php教程 >PHP 非同步

PHP 非同步

WBOY
WBOY原創
2024-08-29 12:51:451152瀏覽

這裡的Async代表Asynchronous,意思是進程不是同步的。非同步允許並行執行程式碼。這意味著我們可以單獨且彼此獨立地運行這段程式碼。這通常被稱為非同步過程,在PHP中也是如此。 PHP 中有非同步模型,它允許我們同時執行多任務。它使程式碼的執行速度更快並提高了效能。

廣告 該類別中的熱門課程 PHP 開發人員 - 專業化 | 8 門課程系列 | 3次模擬測驗

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

文法:

在 PHP 中,我們可以使用 Spatie 套件來使用非同步功能。使用這個包,我們可以創建一個池來處理我們的非同步呼叫並幫助我們提供者的並行執行。為了更好地理解,我們可以看一下文法。見下文;

//package to be used
use Spatie\Async\Pool;
$mypool = Pool::create();
$mypool[] = async() {
//your logic goes here
})->then() {
// your logic
});

首先,我們需要導入包,這裡是‘SpatieAsyncPool’。之後,我們將建立一個池來為我們處理非同步操作。接下來是「async」關鍵字,我們將編寫我們想要並行運行的整個邏輯和程式碼片段。這裡我們有一個「then」方法,它是一個回呼方法。在這裡面,我們還可以寫自己的邏輯。完成所有操作後,我們可以在“then”區塊中對給定輸出編寫更多操作。

PHP 中的非同步函數如何運作?

現在我們知道非同步函數允許我們執行多個任務。如果我們談論 PHP 中的同步編程,那麼我們將始終以相同的順序獲得輸出。假設我們想要列印從 1 到 10 的數字。因此,如果我使用同步程式碼編寫此邏輯,我將始終按升序獲得它。但是,如果我們嘗試在此處使用非同步程式碼來實現相同的邏輯,那麼我們不確定數字的順序。我們將透過下面的一些範例更詳細地討論這一點。為了用 PHP 編寫非同步程式碼,我們使用了一個名為「spatie」的套件。這也為我們提供了更好地處理非同步程式碼中的錯誤和異常的能力。首先,我們將了解如何使用此套件編寫簡單的邏輯。然後我們稍後將詳細討論更多可以與非同步程式碼一起使用的方法。

  • 為了建立非同步區塊,我們首先需要匯入或使用套件「spatie」。我們可以將其導入到我們的程式碼中,如下所示;我們將使用 Composer 安裝這個套件。您也可以在語法下方找到 Composer 命令。

範例:

use Spatie\Async

cmd:

composer require spatie
  • 第二步是我們將建立一個池物件。透過使用這個對象,我們可以編寫非同步函數。請參閱下面的語法以更好地理解;

範例:

$mypool = Pool::create();

我們可以為池物件指定任何名稱。另外,不要忘記導入「Async」中存在的 Pool 類別。見下文;

範例:

use Spatie\Async\Pool;
  • 在這一步驟中,我們現在可以使用池物件建立非同步函數。我們可以給函數任何名稱並編寫我們的邏輯。為了更好地理解,請參閱下面的語法;

範例:

demoAsync(function () {
// //
})
->then(function ($output) {
// //
})

在上面的程式碼中,我們建立了一個非同步函數並使用它的回呼方法「then」。這個「then」函數負責在上面的程式碼區塊成功執行時進行操作。如果沒有,那麼我們需要使用 Async 的其他方法來處理這種情況。

現在我們將看到一些方法來處理執行程式碼時可能發生的錯誤、異常和逾時。這個套件為我們提供了各種方法來在程式碼的非同步區塊內處理這個問題。讓我們詳細討論它們。見下文;

1.超時

當程式碼區塊未能在預期時間範圍內執行其操作或遇到錯誤時,將執行該方法。以下是編寫此方法的語法:

範例:

timeout(function () {
// when timeout reached.
})

2.然後

如果程式碼區塊執行成功並且需要對結果執行額外的操作,則該方法將被執行。以下是編寫此方法的語法:

範例:

then(function ($result) {
// operation after result
})

3.抓住

如果程式碼區塊拋出異常,則該方法將被執行。在這個方法中,我們可以處理它們並執行我們的邏輯。編寫此方法的語法如下所示;

範例:

catch(function ($exp) {
// exception can be handle here.
})

Examples of PHP async

Following are the examples given below:

Example #1

In this example, we are implementing async with the method and printing two messages to keep it simple for beginners.

Code:

use Spatie\Async\Pool;
$mypool = Pool::create();
$mypool
->asyncDemo(function () {
print("async called here !!")
})
->then(function () {
print("then called after result !!")
} ;

Output:

PHP 非同步

Example #2

In this example, we are using all the methods of async from the Spatie\Async\ package. Those are catch, then, and timeout. We keep it simple for now without too much logic.

Code:

use Spatie\Async\Pool;
$mypool = Pool::create();
$mypool
->asyncDemo(function () {
print("async called here !!")
print("async called here !!")
})
->then(function ($output) {
print("print called here !!")
})
->catch(function ($exception) {
print("catch called here !!")
})
->timeout(function () {
print("timeout called here !!")
})
;

Output:

PHP 非同步

Conclusion

By using async in our code, we can enable parallel execution of tasks in our program. Also, they increase the performance of the code because the piece of code is independent of each other. But using StopIteration in situations where the data from the previous block of code is dependent on the current can lead to data loss and inconsistency.

以上是PHP 非同步的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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