Tôi nhận ra rằng tôi rất nghiêm ngặt về việc sử dụng chức năng trống PHP trong đánh giá mã. Thực sự có bất kỳ lý do nào để sử dụng nó theo ý kiến của tôi: Đây là danh sách các lựa chọn thay thế mà tôi khuyên bạn nên sử dụng thay vì trống.Kiểm tra rằng chuỗi có độ dài 0
// Replace
if [empty[$string]] {
}
// With
if [strlen[$string] === 0] {
}
Sử dụng Strlen giao tiếp rằng biến là một chuỗi.
Kiểm tra mảng đó không có yếu tố
// Replace if [empty[$array]] { } // With if [count[$array] === 0] { }
Sử dụng Count giao tiếp rằng biến là một mảng.
Kiểm tra xem mảng có khóa không
// Replace if [empty[$array[$key]]] { } // With if [array_key_exists[$array, $key]] { } // or if you know that existance also means a non-empty value if [isset[$array[$key]]] { }
Cả Array_KEY_EXISTS và ISSET truyền đạt rõ ràng hơn rằng mã quan tâm đến sự tồn tại của một khóa chứ không phải nó giả định sự tồn tại và chỉ kiểm tra một giá trị không trống.
Kiểm tra xem một biến được khai báo trong phạm vi
// Replace if [empty[$var]] { } // With if [isset[$var]] { }
Trong trường hợp này, bạn cũng có thể sử dụng ISSET, nhưng nói chung nếu bạn cần kiểm tra điều này thì dù sao thì có điều gì đó không ổn với mã. Một biến phải luôn luôn có hoặc không được khai báo trong phạm vi hiện tại, không nên có sự không chắc chắn về nó.
Kiểm tra nếu một biến là null
// Replace if [empty[$var]] { } // With if [$var === null] { }
Mã rõ ràng hơn là một bài kiểm tra cho biến là NULL và không vô tình đúng khi 0, giả hoặc chuỗi trống.
Kiểm tra nếu một biến là 0
// Replace if [empty[$var]] { } // With if [$var === 0] { }
Giao tiếp biến đó là số nguyên.
Kiểm tra nếu một biến là sai
// Replace if [empty[$var]] { } // With if [$var === false] { } if [!$var] { }
Giao tiếp biến đó là Boolean.
Chuyện gì xảy ra nếu?
Bây giờ điều gì sẽ xảy ra nếu tôi muốn kiểm tra sự tồn tại và không trống rỗng cho một phím mảng? Sử dụng hai điều kiện làm cho điều này rõ ràng hơn.
Bây giờ điều gì sẽ xảy ra nếu tôi quan tâm đến hiệu suất của trống là một ngôn ngữ xây dựng so với gọi một hàm nội bộ như strlen hoặc đếm? Không phải lo lắng, cả Strlen và Count đều được Opcache tối ưu hóa nếu bạn đặt trước chúng bằng một dấu gạch chéo ngược để gọi trực tiếp cho họ trong không gian tên toàn cầu.
Thực thi tự động
Được trang bị mã PHP Sniffer và Thi thiên Tôi rất vui khi thực thi các quy tắc với các plugin tùy chỉnh của riêng tôi cho một trong hai công cụ.
Chúng tôi có một plugin thánh vịnh tùy chỉnh trong cơ sở mã Tideways của chúng tôi và tôi đã thêm một thử nghiệm tự động để trống bao gồm một đề xuất cho sự thay thế phù hợp dựa trên loại. Nó không hoàn hảo và chưa nắm bắt được tất cả các loại cách sử dụng trống khác nhau, nhưng đó là một khởi đầu đủ tốt. Xem ý chính này để biết mã và cách đưa nó vào PSALM.XML của bạn.
Đăng vào ngày 19 tháng 2 năm 2021 bởi Benjamin Eberlei
Đăng ký nhận bản tin của tôi để được thông báo khi tôi đăng nội dung mới trên blog này và với nội dung độc quyền không thường xuyên cho người đăng ký.
Bằng cách nhấp vào nút Đăng ký, tôi đồng ý với Benjamin Eberlei để giữ tên và địa chỉ email của tôi cho các mục đích liên hệ với tôi với một bản tin về các chủ đề của blog này. Bạn có thể hủy đăng ký bằng một lần nhấp bất cứ lúc nào và rút lại sự đồng ý của bạn. Không có thư rác. Tôi sẽ không bao giờ chia sẻ địa chỉ e-mail của bạn. Chính sách bảo mật
cái nào tốt hơn?
if [!empty[$val]] { // do something }
và
if [$val] { // do something }
Khi tôi kiểm tra nó với PHP 5, tất cả các trường hợp tạo ra kết quả giống nhau. Thế còn Php 4, hoặc có bất kỳ ý tưởng nào tốt hơn?
Hỏi ngày 31 tháng 8 năm 2011 lúc 16:32Aug 31, 2011 at 16:32
1
Bạn nên sử dụng cấu trúc empty[]
khi bạn không chắc chắn nếu biến thậm chí tồn tại. Nếu biến dự kiến sẽ được đặt, hãy sử dụng
// Replace if [empty[$array]] { } // With if [count[$array] === 0] { }0 thay thế.
empty[]
tương đương với
// Replace if [empty[$array]] { } // With if [count[$array] === 0] { }2. Nó trả về true nếu biến là:
// Replace if [empty[$array]] { } // With if [count[$array] === 0] { }
3 [một chuỗi trống]// Replace if [empty[$array]] { } // With if [count[$array] === 0] { }
4 [0 như một số nguyên]// Replace if [empty[$array]] { } // With if [count[$array] === 0] { }
5 [0 như một chiếc phao]// Replace if [empty[$array]] { } // With if [count[$array] === 0] { }
6 [0 dưới dạng chuỗi]// Replace if [empty[$array]] { } // With if [count[$array] === 0] { }
7// Replace if [empty[$array]] { } // With if [count[$array] === 0] { }
8// Replace if [empty[$array]] { } // With if [count[$array] === 0] { }
9 [một mảng trống]// Replace if [empty[$array[$key]]] { } // With if [array_key_exists[$array, $key]] { } // or if you know that existance also means a non-empty value if [isset[$array[$key]]] { }
0 [một biến được khai báo, nhưng không có giá trị trong một lớp]
Đã trả lời ngày 31 tháng 8 năm 2011 lúc 16:36Aug 31, 2011 at 16:36
Arnaud le blancarnaud le blancArnaud Le Blanc
96.4K22 Huy hiệu vàng202 Huy hiệu bạc193 Huy hiệu đồng22 gold badges202 silver badges193 bronze badges
1
Đọc hướng dẫn:
trống [] là ngược lại với [boolean] var, ngoại trừ không có cảnh báo nào được tạo khi biến không được đặt.
Đã trả lời ngày 31 tháng 8 năm 2011 lúc 16:37Aug 31, 2011 at 16:37
mezemezemeze
14.8K4 Huy hiệu vàng46 Huy hiệu bạc52 Huy hiệu đồng4 gold badges46 silver badges52 bronze badges