PHP có các tham số được đặt tên không?

PHP8. 0 giới thiệu các đối số được đặt tên. Đây là một phần mở rộng của cú pháp vị trí hiện tại. Đối số được đặt tên loại bỏ một số hạn chế. Nó cũng hiện đại hóa cách các phương thức được gọi với số lượng đối số tùy ý, với toán tử trải rộng. Hãy xem những gì đang xảy ra ở đó

Xem nhanh các tham số được đặt tên

Cho đến ngày 7 cuối cùng. x, PHP chỉ sử dụng các tham số vị trí. Đối số ở vị trí đầu tiên được gán cho tham số ở vị trí đầu tiên, trong chữ ký phương thức. Mọi đối số bị thiếu sau đó sẽ được điền bằng giá trị mặc định. Cuối cùng, các đối số không cần thiết bị loại bỏ hoặc một thông báo được đưa ra để báo hiệu rằng các tham số bị thiếu

 

Vấn đề phát sinh với các tham số tùy chọn. Đặc biệt khi có nhiều người trong số họ và tất cả họ đều độc lập. Các đối số vị trí áp đặt rằng tất cả các tham số được cung cấp trước khi sử dụng giá trị mặc định và do đó, có thể bị bỏ qua. Khi một tùy chọn phải được đặt và nó nằm ở cuối danh sách tham số, tất cả các giá trị trước đó phải được điền

 
 

Trong PHP gốc, nó xảy ra với các hàm như setcookie(), mail() hoặc jsondecode(). Đôi khi, sự cố bị bỏ qua với chức năng tùy chọn chuyên dụng, như sessionstart() và một loạt tùy chọn

Đối với những hàm đó, danh sách đối số dài. thường thì chúng ta, những người viết mã, phải dựa vào tài liệu để biết đối số nào phải được thông qua. Trên thực tế, không chỉ tham số mục tiêu phải được biết mà còn phải biết tất cả các tham số trước đó để điền vào chúng các giá trị mặc định chính xác của chúng

Tham số được đặt tên

Tham số được đặt tên giải quyết vấn đề này bằng cách đặt tên cho từng tham số. Thật vậy, chúng đã có tên, vì chữ ký gán một tên riêng cho mỗi đối số. Đó không phải là trường hợp cho đến một số phiên bản không quá mới, nhưng hiện tại nó đã được thực thi vào thời điểm sơ khai

Cú pháp cuộc gọi thay đổi một chút, để phù hợp với tên mục tiêu. Đó là tên của đối số trong chữ ký, không có ký hiệu đô la

 
 
1 cổ điển. Hãy lưu ý rằng chúng phân biệt chữ hoa chữ thường

 
 

Từ bây giờ, các đối số được xác định theo tên của chúng, không phải vị trí của chúng. Vì vậy, các giá trị có thể được gán cho đối số phù hợp và thứ tự gọi có thể khác với chữ ký của phương thức

Như bạn có thể thấy, tên của đối số là một loại tài liệu trong mã. Điều này làm cho đối số thứ 7 của setcookie() trở nên rõ ràng. đó là

 
 
2

Tham số được đặt tên và toán tử trải rộng

Toán tử trải rộng ngược lại với biến. Họ chia sẻ cùng một cú pháp.

 
 
3 và chúng có tác dụng ngược lại. Trong một chữ ký,
 
 
3 có nghĩa là tất cả các đối số còn lại được thu thập trong một mảng, trong khi trong một cuộc gọi phương thức, điều đó có nghĩa là tất cả các phần tử của mảng được sử dụng, tương ứng với vị trí của chúng trong mảng

PHP 8 này. 0 mã minh họa tính năng

 
 1, 1]);

// Set to 1-2 
foo(...['a' => 1, 'b' => 2]);

// An error, as $a receives the whole array. Typehint this! 
foo([1, 2]);

?>
 

Như bạn có thể thấy, hai cú pháp của mảng là có thể. vị trí và các tham số được đặt tên. Hãy xem xét cả hai

Đối số vị trí sử dụng chỉ mục số nguyên, cụ thể là chỉ mục được tạo tự động. Khi một mảng được lấp đầy mà không đề cập đến các chỉ mục, PHP sẽ tự động tạo một chỉ mục, bắt đầu từ 0. (Có một số điều tinh tế xung quanh thế hệ này, vì vậy hãy kiểm tra tài liệu về mảng)

Đối số vị trí và thứ tự chỉ mục

Các đối số vị trí dựa trên một mảng PHP đơn giản. nó là đơn giản. phần tử thứ n của mảng được trao cho đối số thứ n trong phương thức

________số 8

Điều đó cũng có nghĩa là chỉ số trong mảng không phải là vị trí của đối số. Như bạn có thể thấy ở trên, khi chỉ mục của mảng bắt đầu từ 4, các đối số vẫn được gửi theo cùng một thứ tự. 0, 1, 2. PHP không tính đến chỉ mục, nhưng vị trí của các phần tử trong mảng. Đây là cách chúng được giới thiệu trong mảng

Hãy đẩy ví dụ này xa hơn một chút

 
 0, -3 => 1, 12 => 2));

// Set to 1-0-2 
$x = array(4 => 0, -3 => 1, 12 => 2); 
ksort($x); 
foo(...$x);

?>
 

Thứ tự của các đối số vẫn giữ nguyên, bất kể thứ tự thực của các chỉ mục trong mảng. Tất nhiên, chúng ta có thể sử dụng thứ tự chỉ mục, bằng cách gọi ksort() trên mảng, để thay đổi vị trí trước khi sử dụng nó trong một lệnh gọi. Bằng cách đó, PHP sắp xếp lại các phần tử theo thứ tự tùy ý, sau đó, sử dụng mảng làm đối số

Thứ tự thực tế mà PHP sử dụng là thứ tự có sẵn với array_values(). Đây là một sự khác biệt tinh tế, đặc biệt khi danh sách các đối số được xây dựng bằng thuật toán. Khi làm như vậy, nên giữ một cách nhất quán để điền vào mảng hoặc sử dụng chỉ mục để sắp xếp các đối số trước khi gọi

Băm trải rộng, chỉ dành cho các đối số

Tất nhiên, cách tốt nhất để sắp xếp là để PHP làm việc đó bằng cách sử dụng các tham số được đặt tên. Như bạn có thể nhận thấy trong các ví dụ đầu tiên, có thể sử dụng hàm băm cho đối số

Băm còn được gọi là bản đồ, trong các ngôn ngữ khác. Đây là phiên bản của mảng PHP, sử dụng các chuỗi làm chỉ mục. Ở đây, giá trị băm chỉ là những gì chúng ta cần để cung cấp tên của các đối số và giá trị của chúng. Vì vậy, nó đã được điều chỉnh cho phù hợp với PHP 8. 0, để gọi đối số được đặt tên. Xin lưu ý rằng không thể sử dụng

 
 
3 với các giá trị băm trong mảng

 
 
1

Quay lại các đối số được đặt tên. Miễn là chỉ mục chuỗi khớp với các đối số, mọi thứ đều ổn. Chỉ cần nhớ bỏ

 
 
1 trong tên chỉ mục, vì nó không cần thiết

Các đối số bổ sung được báo hiệu bằng Lỗi nghiêm trọng.

 
 
7. Các đối số bị thiếu được lấp đầy bằng giá trị mặc định của chúng, khi có sẵn, sau đó cũng được báo hiệu bằng một lỗi.
 
 
8

Tất cả những gì là cổ điển. Tiếp theo là mới

Băm đầy đủ

Băm khớp rất chặt chẽ với phương thức truyền đối số. Tất cả các tên là duy nhất trong chỉ mục băm, giống như các đối số của phương thức. Không có

 
 
9 kép, vì PHP âm thầm ghi đè cái đầu tiên bằng cái thứ hai

Một điểm khác biệt thú vị là câu hỏi về toán tử biến thiên. Vì không thể có nhiều chỉ mục, nên giải pháp tự nhiên là hợp nhất tất cả các giá trị của một đối số trong một mảng. Xét cho cùng, đây là điều mà toán tử

 
 
3 thực hiện, khi nó được sử dụng trong chữ ký phương thức

 
 
7

 
 
8

Hiện có 2 sắc thái giữa các cuộc gọi. đầu tiên, đối số nhận được sẽ thay đổi hình dạng của nó tùy thuộc vào cú pháp gọi

Cuộc gọi đầu tiên là phiên bản mã hóa cứng. Khi nhận,

 
 
1 là một mảng, có một phần tử.
 
 
2. Điều này được mong đợi. Việc thêm đối số thứ ba vào lệnh gọi sẽ thêm giá trị này vào sau giá trị
 
 
2

Cuộc gọi thứ hai là phiên bản động vị trí. Khi nhận,

 
 
1 hiện là một mảng của mảng và các đối số thực tế nằm ở chỉ mục [0]. Điều này tương thích ngược với PHP 7. 2, cũng đang hành xử như vậy. Tuy nhiên, điều này có nghĩa là cách gọi một phương thức có thể ảnh hưởng đến định dạng của các đối số nhận được

Các đối số Variadic hiện được đặt tên

PHP8. 0 giới thiệu một thay đổi mới. mảng kết quả bây giờ cũng là một hàm băm. Nó không phải là một mảng, với một số nguyên là chỉ số. Nó là một hàm băm, trong đó tên của chỉ mục duy nhất là tên của tham số

 
 
3

 
 
0

Chỉ số

 
 
5 đã trở thành chỉ số
 
 
6. Chữ cái này là tên của đối số và nó không thay đổi theo cú pháp gọi. Lần này, nó là một sự thay đổi không tương thích ngược. mã tìm nạp giá trị đối số phải truy cập vào chỉ mục
 
 
6 chứ không phải
 
 
5

Một cách khắc phục vấn đề này là áp dụng array_values() cho đối số đến, để quay trở lại hành vi trước đó. Nếu không, đối số có thể được hợp nhất bởi array_merge() với các mảng khác và khóa sẽ di chuyển khắp ứng dụng. array_merge() và một số hàm gốc PHP khác, giữ nguyên các khóa

Đối số được đặt tên và biến số

Các đối số được đặt tên là mới trong PHP 8. 0 và chúng đã ảnh hưởng đến mã của chúng tôi. Thay vì sử dụng các mảng tùy chọn, giờ đây có thể có tất cả chúng trong chữ ký phương thức và bỏ qua chúng khi cần. Đây chắc chắn là một cải tiến. Tính không tương thích ngược, như lập chỉ mục các đối số biến đổi, sẽ yêu cầu một số điều chỉnh

Đặt tên đối số có thể đọc được sẽ có tác động khác. Cho đến bây giờ, các tên đối số được giới hạn trong lĩnh vực của phương thức và chúng không có khả năng hiển thị bên ngoài. Với PHP8. 0, điều quan trọng là phải đặt tên có ý nghĩa cho các đối số, để chúng có thể đóng vai trò là tài liệu và dễ nhớ

Bạn có thể sẵn sàng cho PHP 8. 0, bằng cách chạy Exakat trên cơ sở mã của bạn. Dưới đây là một số đề nghị đọc

PHP có hỗ trợ các tham số được đặt tên không?

Như đã nêu trong các câu trả lời khác, PHP không hỗ trợ trực tiếp các tham số đã đặt tên .

Tham số được đặt tên trong PHP là gì?

Đối số được đặt tên cho phép truyền đối số cho hàm dựa trên tên tham số, thay vì vị trí tham số . Điều này làm cho ý nghĩa của đối số tự ghi lại, làm cho các đối số không phụ thuộc vào thứ tự và cho phép bỏ qua các giá trị mặc định một cách tùy ý.

Hàm PHP có tham số là gì?

Hàm được tham số hóa PHP là những hàm có tham số. Bạn có thể truyền bất kỳ số lượng tham số nào bên trong một hàm. Các tham số được truyền này hoạt động như các biến bên trong hàm của bạn. Chúng được chỉ định bên trong dấu ngoặc đơn, sau tên hàm.

Java có các tham số được đặt tên không?

Java không có tham số được đặt tên . Đó là lý do tại sao tôi nói đây là "thành ngữ Java tốt nhất mà tôi từng thấy để mô phỏng các đối số từ khóa". "Các tham số được đặt tên" của Objective-C cũng ít lý tưởng hơn, vì chúng buộc phải đặt hàng cụ thể. Chúng không phải là đối số từ khóa thực sự như trong Lisp hoặc Python.