Truyền tham số dạng mảng Array vào function tự động

06.09.2023

5.0/5 (1 Reviews)

Bạn có 1 mảng chưa nhiều phần tử, ứng với tham số của 1 mảng, làm cách nào để truyền tham số dạng array vào function tự động ? Đọc bài viết này của tôi nhé.

    Bạn có 1 mảng chưa nhiều phần tử, ứng với tham số của 1 mảng, làm cách nào để truyền tham số dạng array vào function tự động ? Đọc bài viết này của tôi nhé.

    Bạn sẽ thắc mắc khi nào sẽ cần dùng trường hợp này.

    Khi cần đến trường hợp này là khi bạn cần thiết kế một function có thể truyền nhiều tham số, và function này cũng thay đổi theo từng thời điểm sử dụng, đồng thời chúng làm cùng 1 logic bạn không thể viết thêm 1 function khác chỉ để làm lại 1 việc tương tự.

    Vì vậy bạn chỉ cần 1 hàm, thay đổi các tham số đầu vào để có thể linh động được các giá trị tham số của function.

    Cách làm đơn giản bằng spread

    Để truyền các giá trị trong một mảng vào các tham số của một hàm, bạn có thể sử dụng toán tử spread (hay còn gọi là spread syntax). Toán tử spread cho phép bạn mở rộng một mảng thành các giá trị riêng lẻ, từ đó bạn có thể truyền chúng vào các tham số của hàm.

    Spread syntax trong php tưởng là không cần thiết, nhưng thật sự lại cần thiết không tưởng.
    Bạn có functionA(a,b,c)functionB(c,d,e,f,g,h) đề bài là bạn cần truyền tham số vào 2 function này thông qua 1 function khác, tạm gọi là Entity ví dụ ClassA::functionA, ClassB::functionB thông qua 1 function trung giam là Entity:function(name, params) thay vì bạn cần viết 2 lần Entity để có thể gọi riêng biệt đến 2 function ở 2 Object khác nhau, và nếu các tham số khác nhau bạn sẽ không có cách nào để truyền vào.

    Thì lúc này spread syntax từ javascript được chuyển thể thành ReflectionMethod::invokeArgs sẽ là thức thuộc "hồi sinh" cho chương trình của bạn.

    Khi đó bạn không cần biết functionA hay FunctionB kia có bao nhiêu tham số, chỉ cần truyền 1 array chứa tham số vào thông qua spread syntax, thì hệ thống sẽ tự hiểu và ép các tham số vào đúng vị trí của nó.

    >> Xem thêm: Zalo mini app là gì? Lợi ích của zalo mini app với doanh nghiệp

    Spread syntax trong php

    Trong PHP, không có toán tử spread syntax như trong JavaScript. Tuy nhiên, từ phiên bản PHP 5.6 trở đi, bạn có thể sử dụng một số cú pháp khác để đạt được kết quả tương tự như toán tử spread.

    Một trong những cách thông thường để truyền các giá trị từ một mảng vào các tham số của một hàm trong PHP là sử dụng các hàm như call_user_func_array() hoặc ReflectionMethod::invokeArgs(). Tuy nhiên, từ PHP 5.6 trở đi, bạn có thể sử dụng toán tử unpacking (...) để đạt được kết quả tương tự.

    function myFunction($param1, $param2, $param3) {
        echo $param1 . ' ' . $param2 . ' ' . $param3;
    }
    
    $arr = [1, 2, 3];
    
    myFunction(...$arr);

    Khi chạy đoạn mã trên, nó sẽ truyền các giá trị 123 lần lượt vào các tham số $param1$param2$param3 của hàm myFunction, và kết quả sẽ được in ra là 1 2 3.

    Toán tử unpacking (...) cho phép bạn truyền các giá trị từ một mảng vào các tham số của một hàm một cách thuận tiện và linh hoạt. Tuy nhiên, lưu ý rằng toán tử unpacking chỉ khả dụng từ PHP 5.6 trở đi.

    Ví dụ thực tế

    Ứng dụng toán tử spread vào một mảng [1, 2, 3] và truyền các giá trị lần lượt vào các tham số của một hàm, bạn có thể làm như sau:

    const lp_arr = [1, 2, 3];
    
    function lptechFunction(param1, param2, param3) {
      var_dump(param1, param2, param3);
    }
    
    lptechFunction(...lp_arr);

    Khi chạy đoạn mã trên, nó sẽ truyền các giá trị 123 lần lượt vào param1param2param3 của hàm lptechFunction, và kết quả sẽ được in ra console là 1 2 3.

    Điều tuyệt vời là toán tử spread cũng hoạt động cho các mảng có số lượng phần tử thay đổi. Ví dụ, nếu mảng có 4 phần tử [4, 5, 6, 7], bạn vẫn có thể truyền các giá trị lần lượt vào 4 tham số của hàm tương ứng:

    const lp_arr = [4, 5, 6, 7];
    
    function lptechFunction(param1, param2, param3, param4) {
      var_dump(param1, param2, param3, param4);
    }
    
    lptechFunction(...lp_arr);

    Kết quả sẽ là 4 5 6 7.

    Với toán tử spread, bạn có thể dễ dàng truyền các giá trị trong một mảng vào các tham số của một hàm một cách linh hoạt, bất kể số lượng tham số là bao nhiêu.

     

    ReflectionMethod::invokeArgs là gì ?

    ReflectionMethod::invokeArgs là một phương thức trong PHP Reflection API, cho phép bạn gọi một phương thức (method) của một đối tượng thông qua đối tượng ReflectionMethod và truyền các tham số bằng cách sử dụng một mảng các giá trị.

    Đây là cú pháp của phương thức invokeArgs:

    public mixed ReflectionMethod::invokeArgs ( object $object , array $args )

    Trong đó:

    • $object là đối tượng mà phương thức sẽ được gọi từ.
    • $args là một mảng chứa các giá trị của các tham số sẽ được truyền vào phương thức.

    Dưới đây là một ví dụ sử dụng ReflectionMethod::invokeArgs:

    class MyClass {
        public function myMethod($param1, $param2, $param3) {
            echo $param1 . ' ' . $param2 . ' ' . $param3;
        }
    }
    
    $obj = new MyClass();
    $reflectionMethod = new ReflectionMethod('MyClass', 'myMethod');
    $arr = [1, 2, 3];
    
    $reflectionMethod->invokeArgs($obj, $arr);

    Trong ví dụ trên, chúng ta khởi tạo một đối tượng $obj từ lớp MyClass. Sau đó, chúng ta tạo một đối tượng ReflectionMethod $reflectionMethod để đại diện cho phương thức myMethod của lớp MyClass. Cuối cùng, chúng ta truyền mảng $arr chứa các giá trị tham số vào phương thức bằng cách sử dụng invokeArgs.

    Phương thức invokeArgs sẽ gọi phương thức myMethod trên đối tượng $obj với các giá trị $param1 = 1$param2 = 2, và $param3 = 3. Kết quả sẽ được in ra là 1 2 3.

     

    CÓ THỂ BẠN QUAN TÂM

    Bài Viết Cùng Chuyên Mục

    XEM THÊM
    thumbnail

    LPStack Server: Giải pháp thay thế XAMPP và MAMP năm 2026

    10.03.2026

    Bạn đã chán ngấy XAMPP hay MAMP chậm chạp? Khám phá LPStack Server – Môi trường Local Development siêu nhẹ của người Việt với Auto Vhost, Public Tunnel, chuyển đổi PHP 1-click và quản lý Database Native chuyên nghiệp

    thumbnail

    Hướng Dẫn Tạo Trò Chơi Cờ Caro Nâng Cao bằng HTML

    19.03.2025

    Chào các bạn! Trong bài viết này, chúng ta sẽ cùng nhau xây dựng một trò chơi Cờ Caro đơn giản nhưng có nhiều tính năng thú vị như giới hạn nước đi, pháo hoa khi chiến thắng, chọn chế độ chơi và đếm thời gian.

    thumbnail

    Grok AI: Giới thiệu chi tiết về chatbot của Elon Musk

    04.03.2025

    Grok là một chatbot AI tiên tiến, được phát triển bởi xAI, công ty do Elon Musk sáng lập. Ra mắt lần đầu vào tháng 11/2023, Grok được thiết kế để cạnh tranh với các mô hình AI nổi tiếng như ChatGPT

    thumbnail

    Hướng dẫn tạo Livechat trả lời bằng AI Grok của X

    04.03.2025

    Hướng dẫn kỹ thuật tạo Livechat AI bằng HTML, CSS, JavaScript và PHP Dưới đây là hướng dẫn từng bước để xây dựng một ứng dụng livechat AI đơn giản. Chúng ta sẽ có giao diện frontend (HTML, CSS, JS) và backend (PHP) xử lý tin nhắn.

    thumbnail

    Temu Affiliate là gì? Cách kiếm tiền với Temu mới nhất 2024

    23.10.2024

    Temu Affiliate là một chương trình tiếp thị liên kết mới mẻ được đưa ra bởi sàn thương mại điện tử Temu. Tham gia ⭐️ Chương trình tiếp thị liên kết Temu⭐️! Lên đến ????₫2.500.000.000 mỗi tháng