@ ký tự trước khi gọi hàm


135

Sự khác biệt giữa hai lệnh gọi hàm này trong PHP là gì?

init_get($somevariable);

@init_get($somevariable);

"@" sẽ đóng bất kỳ lỗi và thông báo php nào
Erkan zkök

Câu trả lời:


210

"@" sẽ tắt bất kỳ lỗi php nào mà chức năng của bạn có thể nêu ra.


Nhưng nếu bạn đặt @trước hàm của PHP thì trigger_errorsao? Tôi đã thấy rằng trong một số mã, nhưng hành vi của nó là không phù hợp với tôi cho đến nay. Trong một số trường hợp, tôi thấy lỗi được báo cáo bởi trình xử lý lỗi được cấu hình và trong các trường hợp khác, nó dường như được báo cáo.
fritzmg

2
Các @sẽ tạm thời thiết lập error_reportingđể 0 nhưng sẽ không phải là "đàn áp" lỗi.
solidgumby


36

Như đã trả lời, @sẽ ngăn lỗi (nếu có) hiển thị.
Về mặt hiệu suất, điều này không được khuyến khích.

Những gì php đang làm là:

  • đọc trạng thái hiển thị lỗi
  • cài đặt hiển thị lỗi để hiển thị không có lỗi
  • chạy chức năng của bạn
  • đặt hiển thị lỗi về trạng thái trước đó

Nếu bạn không muốn bất kỳ lỗi hiển thị sử dụng error_reporting(0);.

Hoặc chỉ cần viết mã lỗi miễn phí: P


Thích đặt số 0, nhưng nếu nó hoạt động, thật tuyệt khi không biết về nó :)
AntonioCS

1
Còn những chức năng mà bạn không kiểm soát, chẳng hạn như thư chẳng hạn thì sao? Những lựa chọn khác tồn tại? Tôi đang sử dụng @ ngay bây giờ, nhưng sẽ rất tuyệt khi có thể làm theo cách khác
spuas


6

Như mọi người đã nói, nó dừng đầu ra lỗi cho chức năng cụ thể đó. Tuy nhiên, điều này làm giảm hiệu suất rất nhiều vì nó phải thay đổi cài đặt hiển thị lỗi hai lần. Tôi khuyên bạn KHÔNG nên bỏ qua các cảnh báo hoặc lỗi và sửa mã thay thế.


Cảm ơn tất cả các câu trả lời của bạn. Mã đó không phải của tôi, tôi chỉ nhìn vào mã phpBB vì tò mò, vì vậy tôi không có vấn đề gì về hiệu suất. :) Cảm ơn một lần nữa.
nixie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.