2010-01-04 46 views
98

Sự khác nhau giữa hai hàm gọi hàm này trong PHP là gì?@ ký tự trước khi gọi hàm

init_get($somevariable); 

@init_get($somevariable); 
+0

"@" sẽ đóng mọi lỗi và thông báo php –

Trả lời

154

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

+15

Thông báo cũng sẽ bị tắt tiếng, vì vậy không chỉ lỗi – lugte098

+0

Nhưng nếu bạn đặt '@' trước hàm 'trigger_error' của PHP thì sao? 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 định cấu hình và trong các trường hợp khác, dường như nó được báo cáo. – fritzmg

+1

'@' sẽ tạm thời đặt 'error_reporting' thành 0 nhưng sẽ không" chặn "lỗi. – solidgumby

27

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

php gì đang làm là:

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

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

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

+3

Hoặc 'error_reporting (NONE);' –

+0

Muốn đặt 0, nhưng nếu nó hoạt động, tuyệt vời không biết về nó :) – AntonioCS

+0

Còn về các chức năng mà bạn không kiểm soát, chẳng hạn như thư? Các tùy chọn khác tồn tại? Tôi đang sử dụng @ ngay bây giờ, nhưng sẽ là tuyệt vời để có thể làm theo cách khác nhau – spuas

6

Như mọi người đã nói, nó dừng đầu ra lỗi cho hàm 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ảnh báo hoặc lỗi và sửa mã thay thế.

+0

Nhờ 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 cho sự tò mò, vì vậy tôi không có vấn đề về hiệu suất. :) Cảm ơn một lần nữa. – nixie

Các vấn đề liên quan