2011-11-09 33 views
6

chức năng validate của tôi trông như thếPHP hàm lỗi thiếu đối số

function validate($data, $data2 = 0, $type) 
{ 
... 

Chức năng cuộc gọi dụ

if ($result = validate($lname, 'name') !== true) 
     response(0, $result, 'lname'); 

Như bạn thấy, chức năng validate tôi đã 3 đầu vào vars. Tôi không sử dụng thứ hai var - $ data2 thường xuyên, đó là lý do tại sao đặt nó là 0 theo mặc định. Nhưng khi tôi gọi chức năng này làm ví dụ cho trước (như xa như tôi biết điều đó có nghĩa là $ data = $ lname, $ data2 = 0, $ type = 'name') nhận được thông báo lỗi

Missing argument 3 ($type) for validate() 

Làm thế nào tôi có thể sửa nó?

+0

Gọi như 'validate ($ lname, 0, 'name')' – Rikesh

Trả lời

19

Thiếu đối số 3 ($ type) cho validate()

Luôn luôn liệt kê các đối số tùy chọn làm đối số cuối cùng. Kể từ PHP không có tên thông số cũng không "quá tải ala Java", đó là cách duy nhất:

function validate($data, $type, $data2 = 0) { 
} 
6

Bạn ít nhất nên đặt loại $ trong dòng này:

function validate($data, $data2 = 0, $type) 

tại NULL hoặc '' như bạn có thể xem tại đây:

function validate($data, $data2 = 0, $type = null) 

PHP cho phép bạn thiết lập giá trị cho các thông số , nhưng bạn không thể xác định tham số WITHOUT giá trị đặt trước SAU SỐ thông số một số giá trị eset. Vì vậy, nếu bạn cần phải luôn luôn xác định param thứ ba, bạn phải chuyển sang thứ hai và thứ ba như thế này:

function validate($data, $type, $data2 = 0) 
+0

Cảm ơn vì điều này. – rapidoodle

0

Từ http://php.net/manual/en/functions.arguments.php

Lưu ý rằng khi sử dụng đối số mặc định, bất kỳ giá trị mặc định nên ở bên phải của bất kỳ đối số không mặc định nào; nếu không, mọi thứ sẽ không hoạt động như mong đợi

Bạn nên chuyển đối số thứ hai và thứ ba của hàm, làm đối số tùy chọn đối số cuối cùng. Vì vậy, nó sẽ trở thành:

function validate($data, $type, $data2 = 0) 
{ .... 
Các vấn đề liên quan