2011-09-20 33 views
7

Tôi quen với thói quen kiểm tra loại tham số của mình khi viết các hàm. Có lý do gì để chống lại điều này không? Ví dụ, nó sẽ là thực hành tốt để giữ cho chuỗi xác minh trong mã này hoặc loại bỏ nó, và tại sao?Bạn có nên xác minh các loại tham số trong các hàm PHP không?

function rmstr($string, $remove) { 
    if (is_string($string) && is_string($remove)) { 
     return str_replace($remove, '', $string); 
    } 
    return ''; 
} 

rmstr('some text', 'text'); 

Có những lúc bạn có thể mong đợi các loại thông số khác nhau và chạy đoạn mã khác nhau cho họ, trong trường hợp này việc xác minh là điều cần thiết, nhưng câu hỏi của tôi là nếu chúng ta nên kiểm tra rõ ràng cho một loại và tránh lỗi.

+8

Quá nhiều trừ khi bạn đang tạo thư viện API hoặc xử lý dữ liệu nhập từ người dùng. – thedaian

+0

Tôi cho rằng sẽ có sự sụt giảm dần hiệu suất nếu mọi chức năng bạn viết đã thực hiện điều này, đặc biệt nếu chúng là các hàm nội bộ/riêng tư mà chỉ bạn gọi. –

+0

Tôi đoán nó phụ thuộc vào những gì sẽ xảy ra nếu bạn không có thử nghiệm của bạn và nó không thành công. – Steve

Trả lời

5

Ý kiến ​​của tôi là bạn nên thực hiện xác minh như vậy nếu bạn chấp nhận đầu vào từ người dùng. Nếu những chuỗi đó không được chấp nhận từ người dùng hoặc là đầu vào được khử trùng từ người dùng, thì việc xác minh có quá nhiều.

+0

Tôi đồng ý với bạn, tôi là một trong những người kiểm tra mọi lúc (tôi luôn sợ lỗi). Nhưng thông thường điều này dẫn đến hỗn loạn. Tôi đề nghị hạn chế kiểm tra của bạn quá, thực sự. –

+2

Để cho bạn biết, tất cả dữ liệu đến từ người dùng chỉ có một loại - chuỗi. Vì vậy, loại kiểm tra trở nên hoàn toàn ** vô dụng ** –

+0

Đó là một điểm tốt @ Col.Shrapnel, tôi đoán rằng làm cho xác minh các loại từ người dùng đầu vào một chút dư thừa, trừ khi bạn có thể mong đợi người dùng của hàm gọi nó trực tiếp trong mã của họ chứ không phải hơn là nó được truyền từ một biểu mẫu. –

6

Có, không sao. Tuy nhiên, php không phải là gõ mạnh để bắt đầu, vì vậy tôi nghĩ rằng điều này không phải là rất hữu ích trong thực tế.

Ngoài ra, nếu người dùng sử dụng đối tượng không phải là chuỗi, ngoại lệ là thông tin nhiều hơn; do đó, tôi cố gắng tránh chỉ trả về một chuỗi rỗng ở cuối, bởi vì nó không giải thích ngữ nghĩa rằng gọi rmstr (mảng, đối tượng) trả về một chuỗi rỗng.

+0

Có, thường tôi sử dụng return FALSE bất cứ khi nào có thể để tránh chi phí của một ngoại lệ trong một chức năng nhỏ như vậy, nhưng ở đây tôi giả định rằng người dùng sẽ mong đợi một chuỗi từ rmstr bất kể đầu vào của họ là gì. –

+0

@ Aram không có gì sai với trả về FALSE quá. Nó cũng sẽ được chuyển thành rỗng –

1

Có vẻ như người dân địa phương hiểu câu hỏi này là "Bạn có nên xác minh tham số" không "Bạn có nên xác minh tham số các loại" và đưa ra các câu trả lời và nhận xét vô nghĩa.

Cá nhân tôi không bao giờ kiểm tra loại toán hạng và không bao giờ gặp phải bất kỳ sự cố nào về nó.

2

Đối với tôi, nhập kiểm tra thực tế vào dữ liệu, được lấy từ người dùng ở cấp độ trừu tượng cao nhất, nhưng sau đó, khi bạn gọi hầu hết các chức năng bạn đã có bây giờ, không kiểm tra phương pháp. Nó ảnh hưởng đến hiệu suất và khả năng đọc.

Lưu ý: bạn có thể thêm thông tin, trong đó loại được phép lập luận cho các chức năng của bạn bằng cách PHPDoc

0

Nó phụ thuộc mà mã bạn sản xuất. Nếu đó thực sự là mã sản xuất, bạn nên đảm bảo rằng chức năng của bạn hoạt động bình thường trong mọi trường hợp. Điều này bao gồm việc kiểm tra các tham số chứa dữ liệu bạn mong đợi. Nếu không thì hãy ném một ngoại lệ hoặc có một dạng xử lý lỗi khác (ví dụ của bạn là hoàn toàn mất tích).

Nếu không dùng để sản xuất và bạn không cần phải mã hóa phòng thủ, bạn có thể bỏ qua bất cứ điều gì và tuân thủ nguyên tắc rác thải rác (hoặc nguyên tắc ba nguyên tắc: mã shit, xử lý shit, nhận được shit).

Cuối cùng, tất cả đều phù hợp với mong đợi: Nếu bạn không cần chức năng của mình hoạt động bình thường, bạn không cần phải mã hóa đúng cách. Nếu bạn đang thực sự dựa vào mã của bạn để hoạt động chính xác, bạn thậm chí cần phải xác thực dữ liệu đầu vào cho mỗi đơn vị (hàm, lớp).

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