Hướng dẫn php yield 异步 - php mang lại lợi nhuận không đồng bộ

Phía trước

Bài viết này là để thảo luận với bạn về việc sử dụng năng suất PHP trong trình tạo, không có vòng lặp _________ 19, __________ 20, _______21. Chỉ cần thảo luận về

current return : 12
2 để biến một hàm thành cách sử dụng của trình tạo.

Nội dung chính ShowShow

  • Phía trước
  • Giải thích trang web chính thức
  • Hiểu nó bằng ví dụ
  • Cách tạo trình tạo
  • Chức năng của máy phát điện
  • Generator::current
  • Generator::send
  • Generator::next
  • Generator::rewind
  • Generator::throw
  • Generator::valid
  • Generator::key
  • Generator::__wakeup
  • Generator::getReturn
  • Thông qua các ví dụ 2, hãy gọi hiện tại một lần, hai lần, bạn có thể thấy nhật ký thực thi mã, lần thứ hai, chỉ trả lại kết quả của lần cuối cùng cho chúng tôi, không cho phép trình tạo thực thi lại.
  • Một giá trị được chuyển vào trình tạo current return : 122 và trả về giá trị _get yield data: 321 tiếp theo.
  • Trong ví dụ 21, bạn có thể thấy rằng bạn có thể gọi trực tiếp Send (1), chạy trình tạo và nhập 1 đến năng suất đầu tiên và tiếp tục chạy đến giá trị trả về của sản lượng tiếp theo get yield data: 322. Do đó, ________ 43 và _get yield data: 324 là cùng một giá trị.

Về các đặc điểm của

current return : 12
2, nó đã được đưa vào chương trình nghị sự khi phát triển
current return : 12
4.

Về việc sử dụng

current return : 12
2, tôi đã thấy hầu hết các bài viết ở lại. Cách sử dụng
current return : 12
2 Cách đeo dữ liệu trong

function yield_func()
{
    yield 12;
    return 'a';
}

$gen = yield_func();
$re = $gen->current();
echo 'current return : ' . $re;
9. Hôm nay tôi muốn nói với bạn tất cả các ngữ pháp của trình tạo.

Giải thích trang web chính thức

Hiểu nó bằng ví dụ

Cách tạo trình tạo

Chức năng của máy phát điện

  1. Thông qua các ví dụ 2, hãy gọi hiện tại một lần, hai lần, bạn có thể thấy nhật ký thực thi mã, lần thứ hai, chỉ trả lại kết quả của lần cuối cùng cho chúng tôi, không cho phép trình tạo thực thi lại.
  2. Một giá trị được chuyển vào trình tạo current return : 122 và trả về giá trị _get yield data: 321 tiếp theo.

Trong ví dụ 21, bạn có thể thấy rằng bạn có thể gọi trực tiếp Send (1), chạy trình tạo và nhập 1 đến năng suất đầu tiên và tiếp tục chạy đến giá trị trả về của sản lượng tiếp theo get yield data: 322. Do đó, ________ 43 và _get yield data: 324 là cùng một giá trị.


function func()
{
    $data = (yield [$express]);
}

Về các đặc điểm của

current return : 12
2, nó đã được đưa vào chương trình nghị sự khi phát triển
current return : 12
4.

Hiểu nó bằng ví dụ

Cách tạo trình tạo

Chức năng của máy phát điện

Thông qua các ví dụ 2, hãy gọi hiện tại một lần, hai lần, bạn có thể thấy nhật ký thực thi mã, lần thứ hai, chỉ trả lại kết quả của lần cuối cùng cho chúng tôi, không cho phép trình tạo thực thi lại.

Một giá trị được chuyển vào trình tạo current return : 122 và trả về giá trị _get yield data: 321 tiếp theo.

Cách tạo trình tạo

Chức năng của máy phát điện

Thông qua các ví dụ 2, hãy gọi hiện tại một lần, hai lần, bạn có thể thấy nhật ký thực thi mã, lần thứ hai, chỉ trả lại kết quả của lần cuối cùng cho chúng tôi, không cho phép trình tạo thực thi lại.

Một giá trị được chuyển vào trình tạo current return : 122 và trả về giá trị _get yield data: 321 tiếp theo.

Hướng dẫn php yield 异步 - php mang lại lợi nhuận không đồng bộ

  1. Trong ví dụ 21, bạn có thể thấy rằng bạn có thể gọi trực tiếp Send (1), chạy trình tạo và nhập 1 đến năng suất đầu tiên và tiếp tục chạy đến giá trị trả về của sản lượng tiếp theo get yield data: 322. Do đó, ________ 43 và _get yield data: 324 là cùng một giá trị.
  2. Về các đặc điểm của
  3. current return : 12
    2, nó đã được đưa vào chương trình nghị sự khi phát triển
    current return : 12
    4.
  4. Về việc sử dụng
  5. current return : 12
    2, tôi đã thấy hầu hết các bài viết ở lại. Cách sử dụng
    current return : 12
    2 Cách đeo dữ liệu trong
    
    function yield_func()
    {
        yield 12;
        return 'a';
    }
    
    $gen = yield_func();
    $re = $gen->current();
    echo 'current return : ' . $re;
    9. Hôm nay tôi muốn nói với bạn tất cả các ngữ pháp của trình tạo.

Trình tạo cho phép bạn ghi mã trong khối mã

Chức năng của máy phát điện

Thông qua các ví dụ 2, hãy gọi hiện tại một lần, hai lần, bạn có thể thấy nhật ký thực thi mã, lần thứ hai, chỉ trả lại kết quả của lần cuối cùng cho chúng tôi, không cho phép trình tạo thực thi lại.

Một giá trị được chuyển vào trình tạo current return : 122 và trả về giá trị _get yield data: 321 tiếp theo.

  • Trình tạo :: Hiện tại - Quay trở lại giá trị hiện tại được tạo
  • Trình tạo :: Key -return vào khóa hiện được tạo
  • Trình tạo :: Tiếp theo -Cherator tiếp tục thực hiện
  • Máy phát điện :: Tua lại -Reset iterator
  • Trình tạo :: Gửi - Chuyển giá trị trong Trình tạo
  • Máy phát điện :: ném -throw một ngoại lệ trong máy phát điện
  • Trình tạo :: hợp lệ -Kiểm tra xem người lặp có đóng không
  • Trình tạo :: __ Wakeup -Serialized Gọi lại
  • Trình tạo :: getReturn -get giá trị trả về của máy phát điện

Trích từ Php.net Generalor

Nhìn vào các phương pháp trên, tôi không nghĩ về _

current return : 12
47, chúng thực sự giống nhau. Đồng thời, lưu ý rằng tài liệu của trang web chính thức không có phương pháp lập chỉ mục
current return : 12
48 và truy cập cũng là 404. Tài liệu dựa trên phiên bản EN và CH được sử dụng để tham khảo.

Trên đây là phương pháp của trình tạo, chúng tôi xem từng cái một.

Phương thức thử nghiệm /phphp-yield-test /generatormothod.php, có một ví dụ về từng phương thức, kết quả hoạt động như sau.

Hãy giải thích từng cái một.

Generator::current

  • Quay trở lại giá trị hiện tại

function yield_func()
{
    yield 12;
    return 'a';
}

$gen = yield_func();
$re = $gen->current();
echo 'current return : ' . $re;

Đầu ra:

current return : 12

Xem mã

current return : 12
49.

Thông qua trường hợp mã đầu tiên, bạn có thể nhận được một trình tạo gọi phương thức hiện tại để thực sự bắt đầu thực thi. Thực hiện cho đến khi năng suất. Nếu bạn không thể nhấn năng suất, thực thi đến cuối hàm.

Non -geneoator sẽ ngay lập tức thực thi và nhận kết quả, không phải là đối tượng đối tượng.

Thông qua các ví dụ 2, hãy gọi hiện tại một lần, hai lần, bạn có thể thấy nhật ký thực thi mã, lần thứ hai, chỉ trả lại kết quả của lần cuối cùng cho chúng tôi, không cho phép trình tạo thực thi lại.

Thông qua các ví dụ 1, gọi hàm sẽ nhận được giá trị trả về và nội dung của lợi nhuận là nội dung của phía bên trái của biểu thức năng suất. Nếu không có nội dung của biểu thức, nó là null.

Generator::send

  • Một giá trị được chuyển vào trình tạo
    current return : 12
    2 và trả về giá trị _
    current return : 12
    01 tiếp theo.
current return : 12
4

Đầu ra:

Xem mã

Xem mã

current return : 12
49.

Thông qua trường hợp mã đầu tiên, bạn có thể nhận được một trình tạo gọi phương thức hiện tại để thực sự bắt đầu thực thi. Thực hiện cho đến khi năng suất. Nếu bạn không thể nhấn năng suất, thực thi đến cuối hàm.

Non -geneoator sẽ ngay lập tức thực thi và nhận kết quả, không phải là đối tượng đối tượng.

Thông qua các ví dụ 2, hãy gọi hiện tại một lần, hai lần, bạn có thể thấy nhật ký thực thi mã, lần thứ hai, chỉ trả lại kết quả của lần cuối cùng cho chúng tôi, không cho phép trình tạo thực thi lại.

Generator::next

  • Thông qua các ví dụ 1, gọi hàm sẽ nhận được giá trị trả về và nội dung của lợi nhuận là nội dung của phía bên trái của biểu thức năng suất. Nếu không có nội dung của biểu thức, nó là null.
current return : 12
4

Đầu ra:

current return : 12
5

Xem mã

current return : 12
49.

Thông qua trường hợp mã đầu tiên, bạn có thể nhận được một trình tạo gọi phương thức hiện tại để thực sự bắt đầu thực thi. Thực hiện cho đến khi năng suất. Nếu bạn không thể nhấn năng suất, thực thi đến cuối hàm.

Generator::rewind

  • Non -geneoator sẽ ngay lập tức thực thi và nhận kết quả, không phải là đối tượng đối tượng.
current return : 12
7

Đầu ra:

current return : 12
8

Xem mã

current return : 12
49.

Thông qua trường hợp mã đầu tiên, bạn có thể nhận được một trình tạo gọi phương thức hiện tại để thực sự bắt đầu thực thi. Thực hiện cho đến khi năng suất. Nếu bạn không thể nhấn năng suất, thực thi đến cuối hàm.

Generator::throw

  • Non -geneoator sẽ ngay lập tức thực thi và nhận kết quả, không phải là đối tượng đối tượng.
current return : 12
0

Đầu ra:


function yield_func()
{
    yield 12;
    return 'a';
}

$gen = yield_func();
$re = $gen->current();
echo 'current return : ' . $re;
0

Xem mã

current return : 12
49.

Thông qua trường hợp mã đầu tiên, bạn có thể nhận được một trình tạo gọi phương thức hiện tại để thực sự bắt đầu thực thi. Thực hiện cho đến khi năng suất. Nếu bạn không thể nhấn năng suất, thực thi đến cuối hàm.

Non -geneoator sẽ ngay lập tức thực thi và nhận kết quả, không phải là đối tượng đối tượng.

Generator::valid

  • Thông qua các ví dụ 2, hãy gọi hiện tại một lần, hai lần, bạn có thể thấy nhật ký thực thi mã, lần thứ hai, chỉ trả lại kết quả của lần cuối cùng cho chúng tôi, không cho phép trình tạo thực thi lại.

function yield_func()
{
    yield 12;
    return 'a';
}

$gen = yield_func();
$re = $gen->current();
echo 'current return : ' . $re;
1

Đầu ra:


function yield_func()
{
    yield 12;
    return 'a';
}

$gen = yield_func();
$re = $gen->current();
echo 'current return : ' . $re;
2

Xem mã

current return : 12
49.

Thông qua trường hợp mã đầu tiên, bạn có thể nhận được một trình tạo gọi phương thức hiện tại để thực sự bắt đầu thực thi. Thực hiện cho đến khi năng suất. Nếu bạn không thể nhấn năng suất, thực thi đến cuối hàm.

Non -geneoator sẽ ngay lập tức thực thi và nhận kết quả, không phải là đối tượng đối tượng.

Generator::key

  • Thông qua các ví dụ 2, hãy gọi hiện tại một lần, hai lần, bạn có thể thấy nhật ký thực thi mã, lần thứ hai, chỉ trả lại kết quả của lần cuối cùng cho chúng tôi, không cho phép trình tạo thực thi lại.

function yield_func()
{
    yield 12;
    return 'a';
}

$gen = yield_func();
$re = $gen->current();
echo 'current return : ' . $re;
3

Đầu ra:


function yield_func()
{
    yield 12;
    return 'a';
}

$gen = yield_func();
$re = $gen->current();
echo 'current return : ' . $re;
4

Xem mã

current return : 12
49.

Thông qua trường hợp mã đầu tiên, bạn có thể nhận được một trình tạo gọi phương thức hiện tại để thực sự bắt đầu thực thi. Thực hiện cho đến khi năng suất. Nếu bạn không thể nhấn năng suất, thực thi đến cuối hàm.

Non -geneoator sẽ ngay lập tức thực thi và nhận kết quả, không phải là đối tượng đối tượng.

Generator::__wakeup

  • Trình tạo :: __ Wakeup -Serialized Gọi lại

function yield_func()
{
    yield 12;
    return 'a';
}

$gen = yield_func();
$re = $gen->current();
echo 'current return : ' . $re;
5

Đầu ra:

Xem mã
current return : 12
49.

Thông qua trường hợp mã đầu tiên, bạn có thể nhận được một trình tạo gọi phương thức hiện tại để thực sự bắt đầu thực thi. Thực hiện cho đến khi năng suất. Nếu bạn không thể nhấn năng suất, thực thi đến cuối hàm.

Non -geneoator sẽ ngay lập tức thực thi và nhận kết quả, không phải là đối tượng đối tượng.

Generator::getReturn


function yield_func()
{
    yield 12;
    return 'a';
}

$gen = yield_func();
$re = $gen->current();
echo 'current return : ' . $re;
7

Đầu ra:


function yield_func()
{
    yield 12;
    return 'a';
}

$gen = yield_func();
$re = $gen->current();
echo 'current return : ' . $re;
8

Xem mã

current return : 12
49.

Thông qua trường hợp mã đầu tiên, bạn có thể nhận được một trình tạo gọi phương thức hiện tại để thực sự bắt đầu thực thi. Thực hiện cho đến khi năng suất. Nếu bạn không thể nhấn năng suất, thực thi đến cuối hàm.

Non -geneoator sẽ ngay lập tức thực thi và nhận kết quả, không phải là đối tượng đối tượng.

Trình tạo :: __ Wakeup -Serialized Gọi lại

Đầu ra:

Xem mã current return : 1249.

Thông qua các ví dụ 2, hãy gọi hiện tại một lần, hai lần, bạn có thể thấy nhật ký thực thi mã, lần thứ hai, chỉ trả lại kết quả của lần cuối cùng cho chúng tôi, không cho phép trình tạo thực thi lại.


Thông qua các ví dụ 1, gọi hàm sẽ nhận được giá trị trả về và nội dung của lợi nhuận là nội dung của phía bên trái của biểu thức năng suất. Nếu không có nội dung của biểu thức, nó là null.

Một giá trị được chuyển vào trình tạo current return : 122 và trả về giá trị _get yield data: 321 tiếp theo.

Ví dụ 3 là một cuộc gọi thông thường của dòng điện, gửi. Gọi mã hiện tại và chạy năng suất cho đến khi người dùng gửi tham số đầu vào. Sau khi nhận được đầu vào, tiếp tục chạy. Hiện tại có thể nhận được giá trị pop -up của năng suất và giá trị trả về gửi trống.

PHP yield 生命周期图

Ví dụ 4, gửi trực tiếp gửi, tương đương với việc gọi dòng điện, gửi. Tuy nhiên, giá trị trả lại của dòng điện sẽ không chuyển cho người dùng thông qua SEND.

Trong ví dụ 21, bạn có thể thấy rằng bạn có thể gọi trực tiếp Send (1), chạy trình tạo và nhập 1 đến năng suất đầu tiên và tiếp tục chạy đến giá trị trả về của sản lượng tiếp theo get yield data: 322. Do đó, ________ 43 và _get yield data: 324 là cùng một giá trị.