Tôi lập trình cho một phương thức API chấp nhận một số đối số biến. Phương thức API (xem bên dưới) sử dụng func_get_args. Tôi gói API, và muốn có thể vượt qua một mảng kết hợp thay vì truyền các khóa/giá trị của mảng làm tham số; tức là filter(key1,value1,key2,value2 ...)
Làm thế nào để truyền mảng tới hàm sử dụng hàm func_get_args để lấy tham số
Tôi có quyền truy cập mã nguồn vào API, nhưng rất tiếc là tôi không thể thay đổi nguồn.
Tôi đã xem call_user_func_array, mà tôi tin rằng nên/sẽ vượt qua một mảng như là một tập các đối số (mặc dù không phải là một mảng kết hợp). filter
là một phương thức của một đối tượng - Tôi không biết cách chuyển một phương thức như một cuộc gọi lại. Tôi cũng không biết nếu có một cách sạch sẽ để bọc API này. Bất kỳ và tất cả các trợ giúp được đánh giá cao.
<?php
public function &filter() {
$filter = new QueryFilter($this->queryhandler, $this);
$args = func_get_args();
$filter->applyFilter($this->getFilters($args));
return $filter;
}
Thỏa thuận với 'khóa1',' khóa2' là gì? 'func_get_args' cung cấp một mảng được đánh số theo số, nơi các khóa được xác định trước. – Jon
Bây giờ nó có ý nghĩa. Đã thêm câu trả lời. – Jon
Hàm 'filter' lấy tên trường cơ sở dữ liệu và giá trị trường. Đó là lý do tại sao tôi muốn sử dụng một mảng kết hợp. Mảng kết hợp sẽ cần phải được thao tác để các khóa và giá trị sẽ nằm trong một mảng không liên kết, ví dụ: lấy mảng ('key1' => 'value1', 'key2' => 'value2') và tạo mảng ('key1', 'value1', 'key2', 'value2' ..) mà tôi có thể làm, nhưng tôi không chắc chắn cách chuyển phương thức này thành hàm gọi lại. Tôi không chắc chắn nếu call_user_func_array là cách chính xác để làm điều đó. –