Như đã đề cập ở trên, bạn sẽ không thể bỏ qua các tham số. Tôi đã viết câu trả lời này để cung cấp một số phụ lục, quá lớn để đưa vào một bình luận.
@Frank Nocke đề xuất gọi hàm với các tham số mặc định của nó, vì vậy, ví dụ: có
function a($b=0, $c=NULL, $d=''){ //...
bạn nên sử dụng
$var = a(0, NULL, 'ddd');
về mặt chức năng sẽ giống như bỏ qua hai ( $b
và $c
) tham số đầu tiên .
Không rõ cái nào là 0
giá trị mặc định (được nhập để cung cấp giá trị mặc định, hay nó quan trọng?).
Cũng có một nguy cơ là vấn đề giá trị mặc định được kết nối với chức năng bên ngoài (hoặc tích hợp sẵn), khi các giá trị mặc định có thể bị thay đổi bởi tác giả của hàm (hoặc phương pháp). Vì vậy, nếu bạn không thay đổi cuộc gọi của mình trong chương trình, bạn có thể vô tình thay đổi hành vi của nó.
Một số cách giải quyết có thể là xác định một số hằng số toàn cục, chẳng hạn như DEFAULT_A_B
sẽ là "giá trị mặc định của tham số B của hàm A" và "bỏ qua" tham số theo cách này:
$var = a(DEFAULT_A_B, DEFAULT_A_C, 'ddd');
Đối với các lớp sẽ dễ dàng và thanh lịch hơn nếu bạn định nghĩa các hằng số của lớp, vì chúng là một phần của phạm vi toàn cục, ví dụ.
class MyObjectClass {
const DEFAULT_A_B = 0;
function a($b = self::DEFAULT_A_B){
// method body
}
}
$obj = new MyObjectClass();
$var = $obj->a(MyObjectClass::DEFAULT_A_B); //etc.
Lưu ý rằng hằng số mặc định này được xác định chính xác một lần trong toàn bộ mã (không có giá trị ngay cả trong khai báo phương thức), vì vậy trong trường hợp có một số thay đổi không mong muốn, bạn sẽ luôn cung cấp hàm / phương thức với giá trị mặc định chính xác.
Sự rõ ràng của giải pháp này tất nhiên là tốt hơn so với việc cung cấp các giá trị mặc định thô (như NULL
, 0
v.v.) không nói gì đến người đọc.
(Tôi đồng ý rằng gọi như thế $var = a(,,'ddd');
sẽ là lựa chọn tốt nhất)