2012-02-03 29 views
6

Tôi đang sử dụng filter_var để xác thực giá trị boolean nhưng tôi không mong đợi nó không nhận ra FALSE. Lý do tại sao điều này xảy ra?Boolean xác thực PHP bằng cách sử dụng filter_var

filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)

lợi nhuận

null

+2

bạn muốn xác thực Bool FALSE? – rcs20

+1

đọc này: http: //www.devshed.com/c/a/PHP/Xác thực-Boolean-Giá trị-và-Float-Số-với-Bộ lọc-in-PHP-5/1/ – rcs20

+0

vâng, tôi tự hỏi tại sao 'TRUE' trả về TRUE nhưng' FALSE' trả về null – RS7

Trả lời

5

filter_var là mới như của PHP 5.2. Bạn đã gặp phải lỗi đã biết: https://bugs.php.net/bug.php?id=49510 Hãy bỏ phiếu hoặc nhận xét về lỗi đó.

Bạn đang cố gắng để làm một cái gì đó như thế này:

$v = filter_var($v, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) 

Có một số cách giải quyết giá rẻ như thế này:

$v = $v===FALSE ? FALSE : filter_var($v, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) 
2

Nghe có vẻ như thế này thực sự là như thế nào đó là nghĩa vụ để làm việc, kỳ lạ đủ (có, tâm trí của tôi đã bị thổi bởi điều đó). Từ https://bugs.php.net/bug.php?id=51344

Điều này sẽ âm thanh điên khi bạn đã nhìn vào tiềm ẩn đang lọc, nhưng điều này là thực sự đúng theo tài liệu hướng dẫn : hành vi mặc định của filter_input() là để trở NULL cho đầu vào không tồn tại và sai khi xác thực không thành công và FILTER_NULL_ON_FAILURE chỉ cần bỏ qua hành vi đó thành false cho các đầu vào không tồn tại và NULL khi lỗi xác thực. (Không, tôi không có một đầu mối ở đó cũng hữu ích hoặc tên cờ là không may trong bối cảnh filter_input(), vì nó ngụ ý rằng NULL thường không được trả lại. cảm giác khi sử dụng với filter_var(), mà không có trường hợp đầu vào không tồn tại.)

[bảng bỏ qua do SO định dạng]

tôi sẽ bật một lời nhận xét vào filter_input() và filter_input_array() việc triển khai cần lưu ý rằng điều này là do thiết kế, mặc dù mã có vẻ không đúng.

Đóng không khắc phục được.

0

Đây là hành vi khi filter_var lần đầu tiên được giới thiệu với phiên bản 5.2 và giải quyết tại một số điểm sau 5.4 như được nhìn thấy bằng cách này https://3v4l.org/Cv1MZ

Bắt đầu từ phiên bản 5.4 này là những gì sẽ xảy ra:

var_dump(filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); 

bool (false)

mà mak es nhiều ý nghĩa hơn.

Các vấn đề liên quan