Trên stackoverflow, tôi thấy vấn đề này luôn luôn xuất hiện:
- E_NOTICE? == E_DEBUG, tránh ngay lập tức () và @ với error_handler tinh vi hơn
- Làm cách nào để đặt PHP không kiểm tra chỉ mục hoàn tác cho $ _GET khi bật E_NOTICE?
- Làm thế nào để ngăn PHP đăng nhập lỗi Thông báo PHP
- Làm cách nào để tắt Thông báo PHP 5.3 như vậy?
Ngay cả Pekka (người cung cấp rất nhiều lời khuyên PHP vững chắc) đã gặp phải E_NOTICE
con quái vật đáng sợ và hy vọng có một giải pháp tốt hơn so với việc sử dụng isset()
: isset () và trống () làm cho mã trở nên xấu xí
Cá nhân, tôi sử dụng isset()
và empty()
ở nhiều nơi để quản lý luồng ứng dụng của mình. Ví dụ:
public function do_something($optional_parameter = NULL) {
if (!empty($optional_parameter)) {
// do optional stuff with the contents of $optional_parameter
}
// do mandatory stuff
}
Ngay cả một đoạn đơn giản như thế này:
if (!isset($_REQUEST['form_var'])) {
// something's missing, do something about it.
}
có vẻ rất logic với tôi Nó không giống như phình to, nó trông giống như mã ổn định. Nhưng nhiều nhà phát triển kích hoạt các ứng dụng của họ với E_NOTICE
tính năng được kích hoạt, phát hiện ra rất nhiều thông báo "chỉ số mảng chưa được khởi tạo" bực bội, và sau đó nhăn nhó trước viễn cảnh kiểm tra các biến đã xác định và "xả rác" mã của họ isset()
.
Tôi giả sử các ngôn ngữ khác xử lý mọi thứ khác nhau. Nói từ kinh nghiệm, JavaScript không lịch sự như PHP. Một biến không xác định thường sẽ dừng việc thực thi tập lệnh. Ngoài ra, (nói từ thiếu kinh nghiệm ) Tôi chắc chắn các ngôn ngữ như C / C ++ sẽ từ chối biên dịch.
Vì vậy, các nhà phát triển PHP chỉ lười biếng? (không nói về bạn, Pekka, tôi biết bạn đang cấu trúc lại một ứng dụng cũ.) Hoặc các ngôn ngữ khác xử lý các biến không xác định một cách duyên dáng hơn là yêu cầu lập trình viên kiểm tra trước xem chúng có được xác định không?
(Tôi biết có những E_NOTICE
thông điệp khác bên cạnh các biến không xác định, nhưng những thông báo đó dường như là những thông tin gây ra sự thất vọng nhất)
Phụ lục
Từ các câu trả lời cho đến nay, tôi không phải là người duy nhất nghĩ rằng isset()
không phải là sự phình to mã. Vì vậy, bây giờ tôi đang tự hỏi, có vấn đề gì với các lập trình viên trong các ngôn ngữ khác lặp lại ngôn ngữ này không? Hay đây chỉ là một vấn đề văn hóa PHP?