2010-09-01 46 views
52

thể trùng lặp:
Reference - What does this symbol mean in PHP?@ nghĩa là gì trong PHP?

tôi đã tự hỏi những gì @ nghĩa bằng ngôn ngữ PHP. Tôi đã thấy mọi người đang sử dụng

$connect = @mysql_query('sql query here'); 

Không chắc chắn lý do. Ai đó có thể giải thích nó cho tôi?

+6

đó là một điều xấu. Không bao giờ sử dụng và loại bỏ mọi thứ bạn tìm thấy. –

+5

Đừng nói "không bao giờ". Tôi có thể nghĩ ra một ví dụ cụ thể với ldap khi kiểm tra thông tin đăng nhập của người dùng. Nếu thông tin đăng nhập thất bại, một lỗi được in và không thể bị mắc kẹt với một try/catch. Điều duy nhất bạn có thể làm là kiểm tra kết quả. Mặc dù thông thường tôi đồng ý với bạn, có các ngoại lệ. – Brad

Trả lời

52

Các @ operator nói với PHP để ngăn chặn các thông báo lỗi, do đó họ sẽ không được hiển thị.

Ví dụ, sử dụng:

$result = mysql_query("this is an invalid query"); 

sẽ cho kết quả trong một cảnh báo được hiển thị, nói với bạn rằng các truy vấn MySQL là không hợp lệ, trong khi

$result = @mysql_query("this is still an invalid query"); 

sẽ không được. Tuy nhiên, lưu ý rằng đây là thực hành lập trình rất xấu vì nó không làm cho lỗi biến mất, nó chỉ ẩn chúng, và nó làm cho việc sửa lỗi trở nên tồi tệ hơn rất nhiều vì bạn không thể thấy điều gì thực sự sai với mã của bạn .

Thay vì sử dụng @, bạn nên tắt error_reportingdisplay_errors chỉ display_errors trong php.ini

+0

Sử dụng tốt các ví dụ thực tế, cảm ơn câu trả lời này. – NateDSaint

+0

câu trả lời được chấp nhận để được giải thích chi tiết ... – FlyingCat

+11

Một lưu ý. ** Không bao giờ ** vô hiệu hóa 'error_reporting'. Bạn thực hiện cài đặt này sai. display_errors là một trong những bạn cần trong trường hợp này. –

1

@ là cách để thông báo rằng bạn không muốn in thông báo lỗi. Đó là một thực hành tồi bởi vì bạn có thể có một lỗi và không bao giờ nhìn thấy nó bởi vì bạn chỉ cần "giấu" nó.

PHP hỗ trợ một toán tử điều khiển lỗi: dấu at (@). Khi được thêm vào một biểu thức trong PHP, bất kỳ thông báo lỗi nào có thể được tạo bởi biểu thức đó sẽ bị bỏ qua.


Resources:

0

@ Operator = Chỉ ra rằng nếu có bất kỳ loại lỗi xảy ra, sau đó không hiển thị thông điệp trong trình duyệt của người dùng . Có những người kiểm tra điều này và không thấy sự khác biệt ngay cả khi họ đặt @ hay không họ vẫn không thấy bất kỳ lỗi nào trong trình duyệt, cũng chỉ cần thêm vào, lý do tại sao điều này xảy ra là do cài đặt trong Tệp php.ini cho đầu ra lỗi bị tắt.

Công ty lưu trữ khác nhau có cài đặt khác nhau để đảm bảo rằng bạn không muốn thấy bất kỳ lỗi tập lệnh xấu nào cho người dùng hoặc tin tặc (để họ đưa ra manh mối xâm nhập trang web của bạn), bạn luôn có thể sử dụng toán tử @ .

Hy vọng trợ giúp này.