Monday 23 May 2016

Should I use @ in my PHP code?



If I use @ in my code, will it affect performance?



Answer



This article is helpful for answering your question: http://anvilstudios.co.za/blog/php/how-to-ignore-errors-in-a-custom-php-error-handler/



Specifically the section "@ has its uses":




Now one really should use the @ operator very sparingly, handling
errors instead of suppressing them. But there are a small number of
situations I can think of where one might need to suppress some PHP
errors. Let me offer two examples :





  • You could be using some large external library which has made use of the @, and so need to be able to ignore those errors as the author
    of the library intended, otherwise your program is going to trip up
    where it doesn’t need to. You could edit the library, but it might
    take a lot of time, and your changes would again have to be applied
    each time the author releases an update to the library.


  • Another example might be when the fopen function is used to open an external URL, and the URL cannot be opened for one of many possible
    reasons. The function returns false to indicate a fail, which is
    great, but to quote the PHP manual, "an error of level E_WARNING is

    generated" too, not so great — it should really result in an exception
    being thrown instead, as this is an irregular situation, but one which
    should be expected.
    In this case one would like to be able to ignore
    the error, and continue with the program execution, explicitly
    responding in an appropriate way – exactly what exceptions are for!
    There is, however, a way to convert the error to an exception and so
    avoid using the @ in this situation. In your custom error handler
    (which is where we find ourselves in this post), throw an
    ErrorException – this then requires you to explicitly catch and handle

    it in the code that was using the @ before, which is a better way of
    handling errors.




No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...