Trước hết: Tôi đã cố gắng google, nhưng tôi chủ yếu chỉ tìm thấy các cuộc thảo luận về cách xác định mảng trong hằng số và thông tin không liên quan khác.Lớp PHP chỉ chứa các hằng số
Tôi có câu hỏi liên quan đến giải pháp để làm cho mã của tôi dễ đọc hơn (và đẹp) vừa mới xảy ra với tôi. Về cơ bản, tôi có hầu hết các hàm trả lại mã trạng thái cho biết thành công hoặc, trong trường hợp có sự cố, mã lỗi. Đối với điều này, tôi đã thực hiện một lớp được gọi là "StatusCode" chỉ chứa các hằng số, như vậy:
<?php
class StatusCode {
const success = 0;
const badArgument = -1;
const badQuery = -2;
const outOfMana = -3; //Really just for demonstration purposes
...
}
Mục đích là làm cho con số ma thuật biến mất từ mã của tôi và làm cho nó rõ ràng những gì đã xảy ra mà không cần phải tìm kiếm một giải thích ở đâu đó:
if (mana > 10) {
//Do some magic
return StatusCode::success;
}
else {
//Oh god this is not good!
return StatusCode::outOfMana;
}
Nó cũng nên loại bỏ khả năng vô tình sử dụng mã lỗi trùng lặp. Tôi khá chắc chắn điều này bổ sung thêm một chi phí nhỏ cho ứng dụng của tôi, nhưng đã làm cho mã của tôi dễ hiểu hơn. Có một số lý do vỡ tan trái đất không phải để làm điều này? Có lẽ một cách tốt hơn để đi về nó?
(Tôi đã tránh được cách tiếp cận define(CONSTANT, "value")
vì nó có vẻ ít xinh đẹp và đó là một rắc rối để viết trên bàn phím tiếng Đức của tôi :))
Không có lý do gì để KHÔNG làm những gì bạn đã làm. Như bạn đã nói, nó làm cho mã của bạn dễ đọc hơn. Đối với việc thêm chi phí, ngay cả khi đó là sự thật, nó hoàn toàn tối thiểu trên không. Đối với những cách tốt hơn, có những biến thể cho những gì bạn đã thực hiện bằng cách sử dụng các giao diện để xác định các hằng số. TL; DR - những gì bạn đã làm là tốt. –
Hoàn toàn đồng ý với những gì @ N.B. nói. Vấn đề duy nhất của tôi với bài viết này là nó nên được hơn lúc xem xét mã, không phải ở đây;) – Prisoner
Trong góc nhỏ của phong cách mã hóa sự lựa chọn của bạn là tốt nhất tuyệt đối có.Và khi nói về phong cách, người ta không thể nói "tuyệt đối tốt nhất" rất thường xuyên. ;-) BTW, bạn có thể muốn làm cho lớp này 'abstract' hoặc' final' là một gợi ý bổ sung về cách nó không được sử dụng. Thật không may nó không thể là cả hai, mà sẽ niêm phong thỏa thuận. – Jon