Fn() PHP là gì?

Khi các chức năng mũi tên xuất hiện trong ECMA 6, chúng cho phép các nhà phát triển linh hoạt hơn nhiều khi sử dụng các chức năng. Đột nhiên, bạn có thể có các hàm ẩn danh cú pháp ngắn cũng kế thừa phạm vi gốc

this.foo = 'bar'; let func = () => console.log(this.foo); func(); //"bar"

PHP đã có phiên bản hàm mũi tên riêng trong phiên bản 7. 4, năm 2019. Hai điểm chính giống nhau - tôi. e. rằng chúng cho phép biểu thức hàm cú pháp ngắn và kế thừa phạm vi gốc - nhưng chúng cũng có một số khác biệt

Trước tiên chúng ta hãy xem cú pháp. Trong PHP, các hàm mũi tên trông giống như thế này

$double = fn($num) => $num * 2;

Chú ý fn? . Không chắc tại sao các nhà thiết kế PHP nghĩ rằng điều đó là cần thiết, nhưng bạn đã làm được

Bạn vẫn có thể thêm các liên kết loại/trả lại nếu muốn

$double = fn(int $num):int => $num * 2;

Nhưng đây là nơi mà sự khác biệt bắt đầu. Ví dụ: bạn không thể bỏ qua dấu ngoặc đơn xung quanh các đối số như bạn có thể làm trong JavaScript nếu bạn chỉ chuyển một đối số duy nhất. Trong JavaScript, những điều sau đây là tương đương

let func1 = singleArg => 'return val'; let func2 = (singleArg) => 'return val';

Trong PHP, dấu ngoặc đơn là bắt buộc. Điều này có lẽ là để tách lập luận khỏi phần fn không thể thương lượng

fn $singleArg => true; //syntax error

Hơn nữa, các hàm mũi tên trong PHP chỉ có thể thực hiện các biểu thức đơn lẻ, không giống như trong JavaScript, nơi bạn có thể nhóm nhiều biểu thức lại với nhau thành một khối

fn($arg) => { doSomething(); andSomethingElse(); } //syntax error

Một sự khác biệt thú vị khác là, không giống như JavaScript, các hàm mũi tên trong PHP không thể sửa đổi các biến bên ngoài. Điều này là do chúng sử dụng cái được gọi là ràng buộc "theo giá trị" - nói cách khác, hàm mũi tên chỉ có quyền truy cập vào các bản sao của giá trị của các biến bên ngoài, thay vì tham chiếu đến chúng

Vì vậy, điều này, ví dụ, không có tác dụng

$a = 14; $incr = fn($a) => $a++; $incr($a); echo $a; //still 14

Chúng ta có thể giải quyết vấn đề này theo cách thông thường, bằng cách buộc giá trị đến theo tham chiếu qua &

$double = fn($num) => $num * 2;0

Tôi hy vọng bạn tìm thấy sự so sánh này hữu ích

Fn() PHP là gì?
Tôi đã giúp bạn?

Fn() PHP là gì?
Xin chào

Tôi là Andy, chuyên gia JavaScript, Vue và PHP đến từ Nottingham, Vương quốc Anh. Tôi chủ yếu viết blog về JavaScript. Hơn

Hướng dẫn chuyên sâu

  • Fn() PHP là gì?
    docker
  • Fn() PHP là gì?
    Cú pháp trải/nghỉ
  • Fn() PHP là gì?
    Bản đồ và Bộ
  • Fn() PHP là gì?
    ủy quyền sự kiện
  • Fn() PHP là gì?
    Không đồng bộ/chờ đợi
  • Fn() PHP là gì?
    lời hứa
  • Fn() PHP là gì?
    máy phát điện
  • Fn() PHP là gì?
    Iterator và Iterable

dự án

  • Fn() PHP là gì?
    cfimp

    cfimp là một công cụ CLI đơn giản nhưng mạnh mẽ để nhập/cập nhật dữ liệu CSV trong CMS không đầu có nội dung

  • Fn() PHP là gì?
    minh mẫn. js

    minh mẫn. js là một khung JavaScript dựa trên thành phần, phản ứng để xây dựng ứng dụng. Đó là unopinionated, trọng lượng nhẹ và dễ sử dụng

  • Fn() PHP là gì?
    Cây dữ liệu

    DataTree là một công cụ trực quan hóa cây dựa trên JavaScript có thể tùy chỉnh. Dữ liệu có thể ở định dạng XML hoặc JSON, được cung cấp trực tiếp hoặc được tìm nạp từ một dịch vụ web

  • Fn() PHP là gì?
    trườngState

    FieldState là trình xử lý trạng thái trực quan cho các trường biểu mẫu trong đó trạng thái bắt buộc/có sẵn phụ thuộc vào các yếu tố khác, chẳng hạn như. g. các giá trị/lựa chọn của các lĩnh vực khác

    Trước đó, chúng ta phải tuân theo việc sử dụng từ khóa

    $add = fn($valone,$valtwo) => $valone + $valtwo;
    $add(1,2) // 3
    
    4 cho sự tham gia của một biến từ phạm vi cha

    $y = 1;
    $fn = function ($x) use ($y) {
        return $x + $y;
    };
    echo $fn(2); // 3
    

    Biểu thức được xác định trong phạm vi cha sẽ được ngầm hiểu theo giá trị

    $y = 1;
    $fn = fn($x) => $x + $y;
    echo $fn(2); // 3
    

    Phần trên theo sau đối với biến

    $add = fn($valone,$valtwo) => $valone + $valtwo;
    $add(1,2) // 3
    
    5 bên trong các phương thức lớp

    class foo {
       public function test() {
           $context = fn() => var_dump($this);
           $context(); 
       }
    }
    $test = new foo();
    $test->test();  // object(foo)#1 (0) { }
    

    Giống như trước đây, chúng tôi đã từng thực hiện các thao tác của mình bằng cách sử dụng từ khóa

    $add = fn($valone,$valtwo) => $valone + $valtwo;
    $add(1,2) // 3
    
    4 để lấy một biến từ phạm vi cha, vì vậy điều này có nghĩa là chúng tôi không thể ghi giá trị của biến từ hàm vào phạm vi trên

    $y = 1;
    $fn = fn() => $y++;
    $fn(); // Has no effect
    echo $y  // 1
    

    Nếu chúng ta đang nghĩ đến việc gán giá trị của một biến khác từ bao đóng thì điều này cũng sẽ không hoạt động

    $y = 1;
    $f = 0;
    $fn = fn() => $f = $y + 1;
    $fn();
    echo $f; // 0
    

    chữ ký chức năng

    Điều này hoàn toàn mới trong PHP, điều này cho phép chúng ta xác định loại hàm, biến và giá trị mà hàm trả về

    ________số 8_______

    Lỗi được đưa ra khi loại đối số đã xác định không được đặt trong đối số khi gọi hàm. Có thể bắt lỗi bằng cách sử dụng loại

    $add = fn($valone,$valtwo) => $valone + $valtwo;
    $add(1,2) // 3
    
    7

    $var = 10;
    $int_fn = fn(int $x): int => $x;
    var_dump($int_fn($var)); // int(10)
    try {
        $int_fn("foo");
    } catch (TypeError $e) {
        echo $e->getMessage(), "\n"; // Argument 1 passed to {closure}() must be of the type int, string given, called in x on line y
    }
    

    Bởi PHP 7. 1, họ hỗ trợ

    $add = fn($valone,$valtwo) => $valone + $valtwo;
    $add(1,2) // 3
    
    8 trong các đối số cho phép đối số cũng là null

    $funn = fn(?int.. $args): array => $args;
    var_dump($funn(20, null, 30)); // Array(3) { [0]=> int(20) [1]=> NULL [2]=> int(30) }
    

    Nếu bạn cung cấp một chuỗi hoặc bất kỳ thứ gì khác thay vì int cho hàm trên, thì bạn sẽ gặp lỗi

    Đối số được chuyển đến {đóng}() phải thuộc loại int hoặc null, chuỗi đã cho, được gọi bằng x trên dòng y

    Hàm mũi tên lồng nhau

    $add = fn($valone,$valtwo) => $valone + $valtwo;
    $add(1,2) // 3
    
    0

    Bất kỳ lỗi nào có thể xảy ra bên trong bao đóng đều không được ném ra trừ khi được gọi

    $add = fn($valone,$valtwo) => $valone + $valtwo;
    $add(1,2) // 3
    
    1

    Nếu báo lỗi bị tắt thì bạn sẽ chỉ nhận được

    $add = fn($valone,$valtwo) => $valone + $valtwo;
    $add(1,2) // 3
    
    9

    Cách sử dụng PHP. 7. 4 bây giờ?
    Để kiểm tra trực tuyến nhanh chóng, chỉ cần dán các mã này vào đó

    Đối với hệ thống gốc của bạn, tôi vừa sao chép nhánh php-src này và biên dịch nó bằng GCC và tạo. Tôi đã làm bài kiểm tra của mình thông qua một bài kiểm tra. php và dòng lệnh để kiểm tra xem mọi thứ có hoạt động không

    Việc sử dụng hàm trong PHP là gì?

    Hàm là một đoạn mã nhận đầu vào khác ở dạng tham số, xử lý và sau đó trả về giá trị . Tính năng Hàm PHP là một đoạn mã có thể được sử dụng nhiều lần và chấp nhận các danh sách đối số làm đầu vào và trả về một giá trị. PHP đi kèm với hàng ngàn tính năng tích hợp.

    Tại sao PHP sử dụng mũi tên?

    Các hàm mũi tên được giới thiệu như một bản cập nhật trong phiên bản PHP 7. 4. Hàm mũi tên được cho là phiên bản ngắn gọn hơn của hàm ẩn danh . Các hàm mũi tên có thể được coi là các hàm tốc ký tự động kế thừa các biến của phạm vi cha.

    Chức năng ẩn danh trong PHP 8 là gì?

    Hàm ẩn danh là hàm không có tên do người dùng định nghĩa . Hàm như vậy còn được gọi là hàm đóng hoặc hàm lambda. Đôi khi, bạn có thể muốn một chức năng để sử dụng một lần. Đóng cửa là một chức năng ẩn danh đóng trên môi trường mà nó được xác định.

    Làm cách nào để tạo một hàm ẩn danh trong PHP?

    Bạn có thể tạo một hàm ẩn danh bằng cách sử dụng cú pháp định nghĩa hàm bình thường, nhưng gán hàm đó cho một biến hoặc chuyển trực tiếp hàm đó. Ví dụ 3-6 hiển thị một ví dụ sử dụng usort()