Gán giá trị trả về mới theo tham chiếu là deprecated bằng PHP 5.3. Như vậy,PHP 5.3 và gán giá trị trả về mới bằng cách tham chiếu
$obj =& new Foo();
hiện ném một lỗi E_DEPRECATED
.
Khi nâng cấp một ứng dụng lớn có nhiều mã cũ lên 5.3, điều này dẫn đến nhiều thông báo không mong muốn.
Để khắc phục sự cố này, tôi đang xem xét sử dụng cụm từ thông dụng để tìm và thay thế tất cả các phiên bản =& new
bằng = new
. Ví dụ, sau đây sẽ tìm thấy tất cả các file PHP, và quét sạch tất cả các trường của =& new
:
find ./ -name '*.php' | xargs perl -p -i -e 's/=(\s*)&(\s*)?new\b/= new/g'
Looking for câu trả lời cho các câu hỏi sau:
- nó sẽ chỉ làm việc tốt? Tôi có thể gặp phải những vấn đề tiềm ẩn nào?
- Nếu không, ví dụ về mã thay thế
=& new
bằng= new
sẽ thay đổi hành vi trong PHP 5.3. - Bất kỳ ví dụ nào về các thư viện phổ biến với điều này sẽ được biết là gây ra sự cố.
- Bạn có đề xuất những ý tưởng nào khác để giải quyết việc sửa số tiền lớn
=& new
?
Tôi nghi ngờ điều này sẽ hoạt động tốt, nhưng tìm kiếm các trường hợp cạnh mà tôi có thể gặp sự cố. Có, tôi biết tôi chỉ có thể thay đổi cài đặt báo cáo lỗi. Nhưng tôi không muốn giấu các thông báo, tôi muốn sửa chúng.
E_DEPRECATED thuộc về lớp thông báo, không phải lỗi. Tôi không chắc bạn cần phải vội vàng sửa chữa nó (magic_quotes đã tuyên bố không được chấp nhận trong php 4.2 hoặc hơn). Đối với regex: bạn nên thêm một '\ b' sau' new', nhưng nếu không thì đó là phương pháp viết lại khả thi. Nhưng bạn chỉ có thể kiểm tra nếu nó làm suy yếu logic xử lý dự kiến (mặc dù không chắc). – mario
@mario E_DEPRECATED chỉ là lỗi * cấp *. Nó sẽ là thích hợp để đề cập đến nó một trong hai cách. Điểm tốt với \ b mặc dù. – mfonda