Hàm lambda trong php là gì?

Nhưng thật phiền toái nếu bạn cần viết các hàm ẩn danh dài hơn bằng cách sử dụng

function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
1 vì rất khó để viết phần thân hàm theo cách đó bên trong dấu ngoặc kép và sau đó thoát khỏi dấu ngoặc kép và những thứ khác

PHP5. 3 đã giới thiệu hỗ trợ thực sự cho các hàm lambda/ẩn danh tương tự như cách bạn thấy trong Javascript, vì vậy bạn có thể viết mã ở trên như

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25

Có thể thấy, hàm ẩn danh trên không có tên và được gán cho biến

function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
3. Bạn cũng có thể chuyển cho nó các chức năng khác

function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!

Bạn cũng có thể đã viết ở trên như thế này nếu bạn muốn

function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply, 2, 5]; // you have 10 emails!

Và thậm chí như thế này

function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

echo countEmails[function [$a, $b] {
    return $a * $b;
}, 2, 5]; // you have 10 emails!

Bạn cũng có thể gán nó cho mảng

$array['multiply'] = function [$a, $b] {
     return $a * $b;
};

echo $array['multiply'][2, 10]; // 20

Và thậm chí một đối tượng

$obj = new StdClass[];

$obj->multiply = function [$a, $b] {
     return $a * $b;
};

Nhưng lưu ý ở đây là thay vì gọi nó như

function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
4, thay vào đó bạn cần phải làm

$multiply = $obj->multiply;
echo $multiply[2, 10]; // 20

Bây giờ, hãy tạo một chương trình nhỏ có nội dung

function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
5 bằng hàm ẩn danh

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25
1

Rất tiếc, nó dẫn đến lỗi

function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
6

Nó có nghĩa là chức năng ẩn danh không có quyền truy cập vào

function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
7 bên trong nó. Đây chính xác là lúc chúng ta cần một bao đóng để có quyền truy cập vào biến
function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
7 đó

Đóng cửa là gì

Một bao đóng là một hàm lambda/ẩn danh nhận biết ngữ cảnh xung quanh của nó thông qua việc sử dụng từ khóa

function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
9. Nó có thể truy cập một biến bên ngoài phạm vi mà nó được xác định. Xem xét hàm ẩn danh
function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply, 2, 5]; // you have 10 emails!
0 cuối cùng và chúng tôi chuyển đổi nó thành đóng thông qua việc sử dụng từ khóa
function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
9 và có quyền truy cập vào biến
function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
7

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25
9

Nhờ đóng [

function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
9 từ khóa], bây giờ chúng tôi có thể truy cập biến
function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
7

Nếu bạn cần thay đổi giá trị của biến bên ngoài đã truyền, tất nhiên bạn cần sử dụng tham chiếu

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25
0

Bạn cũng có thể chuyển đối số thông thường để đóng

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25
1

Bạn cũng có thể tạo một hàm đệ quy bằng cách sử dụng bao đóng một cách dễ dàng, đây là ví dụ về cách bạn có thể tạo một hàm giai thừa

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25
2

Lưu ý rằng

function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply, 2, 5]; // you have 10 emails!
5 được chuyển qua tham chiếu bằng cách sử dụng
function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply, 2, 5]; // you have 10 emails!
6 nếu không nó sẽ không hoạt động

Sự khác biệt giữa hàm ẩn danh và bao đóng là bao đóng có khả năng truy cập một biến nằm ngoài phạm vi của nó bằng cách sử dụng từ khóa

function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
9. Vì vậy, đó là sự khác biệt tinh tế giữa chức năng ẩn danh và chức năng đóng. Trên thực tế, cả hai đều là thể hiện của lớp
function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply, 2, 5]; // you have 10 emails!
8 trong nội bộ

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25
3Gợi ý kiểu

Chúng tôi biết rằng bạn đã có thể nhập một số gợi ý

  • Vật
  • Mảng
  • giao diện
  • gọi được

Nhưng bạn cũng có thể gõ gợi ý

function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply, 2, 5]; // you have 10 emails!
8 như hình bên dưới

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25
4

Ở đây chúng tôi đã tạo hàm

function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

echo countEmails[function [$a, $b] {
    return $a * $b;
}, 2, 5]; // you have 10 emails!
0 để yêu cầu loại
function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply, 2, 5]; // you have 10 emails!
8 làm tham số thứ hai

Trường hợp sử dụng

Hàm ẩn danh và bao đóng có thể được sử dụng trong nhiều tình huống

Là cuộc gọi lại

Bạn có thể sử dụng chúng trong các chức năng tùy chỉnh của mình dưới dạng gọi lại hoặc một số chức năng tích hợp sẵn của PHP, chẳng hạn như

function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

echo countEmails[function [$a, $b] {
    return $a * $b;
}, 2, 5]; // you have 10 emails!
2,
function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

echo countEmails[function [$a, $b] {
    return $a * $b;
}, 2, 5]; // you have 10 emails!
3,
function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

echo countEmails[function [$a, $b] {
    return $a * $b;
}, 2, 5]; // you have 10 emails!
4,
function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

echo countEmails[function [$a, $b] {
    return $a * $b;
}, 2, 5]; // you have 10 emails!
5, v.v. Hãy lấy ví dụ về
function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

echo countEmails[function [$a, $b] {
    return $a * $b;
}, 2, 5]; // you have 10 emails!
5. Nếu bạn nhìn vào định nghĩa của nó, đây là giao diện của nó

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25
5

Lưu ý tham số thứ hai

function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

echo countEmails[function [$a, $b] {
    return $a * $b;
}, 2, 5]; // you have 10 emails!
7. Nó có nghĩa là nó mong đợi một cái gì đó có thể gọi được. Bất cứ khi nào bạn thấy tham số như vậy trong một số định nghĩa hàm, điều đó có nghĩa là bạn có thể áp dụng các hàm ẩn danh cho nó. Đây là ví dụ

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25
6

trong định tuyến

Bạn có thể đã thấy các bao đóng được sử dụng trong định tuyến trong khuôn khổ như Laravel, Slim, Silex, v.v.

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25
7

Ở đây,

function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

echo countEmails[function [$a, $b] {
    return $a * $b;
}, 2, 5]; // you have 10 emails!
8 được nhập từ phạm vi bên ngoài vào phạm vi đóng để nó có thể được sử dụng để hiển thị chế độ xem
function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

echo countEmails[function [$a, $b] {
    return $a * $b;
}, 2, 5]; // you have 10 emails!
9

Truy cập các thành viên riêng của một lớp

Chúng ta có thể sử dụng các phương thức

$array['multiply'] = function [$a, $b] {
     return $a * $b;
};

echo $array['multiply'][2, 10]; // 20
0 hoặc
$array['multiply'] = function [$a, $b] {
     return $a * $b;
};

echo $array['multiply'][2, 10]; // 20
1 của lớp
function countEmails[$multiply, $a, $b] {
    echo 'you have ' . $multiply[$a, $b] . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply, 2, 5]; // you have 10 emails!
8 để truy cập dữ liệu của lớp
$array['multiply'] = function [$a, $b] {
     return $a * $b;
};

echo $array['multiply'][2, 10]; // 20
3 chẳng hạn

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25
8

Bạn thấy đấy, chúng ta có thể lấy giá trị của biến riêng

$array['multiply'] = function [$a, $b] {
     return $a * $b;
};

echo $array['multiply'][2, 10]; // 20
4

Tương tự, cũng có thể thêm hành vi mới vào một lớp mà không thực sự sửa đổi trực tiếp nó. Khá tuyệt phải không?

Lazy-loading một lớp học

Một điều

$array['multiply'] = function [$a, $b] {
     return $a * $b;
};

echo $array['multiply'][2, 10]; // 20
5 khác mà bạn có thể làm với việc đóng cửa là tải chậm một lớp. Ví dụ

$multiply = function [$a, $b] {
    return $a * $b;
};

echo $multiply[5, 5]; // 25
9

Nếu bạn chạy mã trên, bạn có thể thấy thông báo

$array['multiply'] = function [$a, $b] {
     return $a * $b;
};

echo $array['multiply'][2, 10]; // 20
6 vì người ta có thể nghĩ rằng chúng tôi đang tạo một phiên bản của
$array['multiply'] = function [$a, $b] {
     return $a * $b;
};

echo $array['multiply'][2, 10]; // 20
7. Điều đó không đúng, bởi vì mã bên trong hàm ẩn danh
$array['multiply'] = function [$a, $b] {
     return $a * $b;
};

echo $array['multiply'][2, 10]; // 20
8 không chạy cho đến khi bạn thực sự gọi nó

function countEmails[$number] {
    echo 'you have ' . $number . ' emails!';
}

$multiply = function [$a, $b] {
    return $a * $b;
};

echo countEmails[$multiply[2, 5]]; // you have 10 emails!
0

Và bây giờ bạn sẽ thấy thông báo

$array['multiply'] = function [$a, $b] {
     return $a * $b;
};

echo $array['multiply'][2, 10]; // 20
6. Vì vậy, đây là một thủ thuật khá gọn gàng để trì hoãn một số đoạn mã và chỉ sử dụng nó khi bạn cần

Hàm lambda dùng để làm gì?

Lambda chạy mã của bạn trên cơ sở hạ tầng điện toán có độ sẵn sàng cao và thực hiện tất cả công việc quản trị tài nguyên điện toán, bao gồm bảo trì máy chủ và hệ điều hành, cung cấp dung lượng và tự động thay đổi quy mô cũng như ghi nhật ký

chức năng lambda với ví dụ là gì?

Hàm lambda là một hàm ẩn danh nhỏ . Hàm lambda có thể nhận bất kỳ số lượng đối số nào, nhưng chỉ có thể có một biểu thức.

Làm cách nào để sử dụng PHP trong lambda?

$request = getNextRequest[]; . $invocationId = $request->getHeader['Lambda-Runtime-Aws-Request-Id'][0]; . tệp php request_once $_ENV['LAMBDA_TASK_ROOT']

Chúng ta có thể chạy PHP trong lambda không?

Trước đây, chúng ta đã biết cách sử dụng AWS Lambda làm dịch vụ lưu trữ web cho các ứng dụng web hoàn chỉnh. Nhưng chúng ta cũng có thể chạy các hàm PHP hướng sự kiện trên AWS Lambda . Các chức năng viết rất hữu ích để xử lý các sự kiện và dữ liệu từ các dịch vụ AWS khác.

Chủ Đề