Что означает символ "@" в следующем коде?
@mkdir(ROOT. "cache/");
Что означает символ "@" в следующем коде?
@mkdir(ROOT. "cache/");
Он подавляет ошибки при отображении:
PHP поддерживает один оператор управления ошибкой: знак at (@). При добавлении выражения в PHP любые сообщения об ошибках, которые могут быть сгенерированы этим выражением, будут игнорироваться.
Если функция track_errors включена, любое сообщение об ошибке, сгенерированное выражением, будет сохранено в переменной $php_errormsg. Эта переменная будет перезаписана при каждой ошибке, поэтому сначала проверьте, хотите ли вы ее использовать.
Как отмечалось в комментариях, я тоже не могу представить причину, чтобы фактически использовать эту функциональность - написать код, который соответствующим образом соответствует состояниям/состояниям ошибок.
Как указано, это оператор подавления ошибок.
Но то, о чем не было указано, заключается в том, что использовать очень плохую практику - ошибки не должны терпеть неудачу.
Проверьте наличие ошибок и используйте блоки try/catch, в которых используются исключения.
В конкретном примере...
@mkdir(ROOT. "cache/");
... он игнорирует любые ошибки из mkdir()
. docs говорит, что он возвращает FALSE
при сбое, поэтому вы должны делать...
if ( ! mkdir(ROOT. "cache/")) {
// Handle error.
}
Люди, похоже, забывают, что PHP был быстрым грязным языком для достижения поставленных целей, только недавно он пытался стать зрелым и сложным.
Подавление ошибок - быстрый и грязный способ заставить функции вести себя так, как вам нужно, потому что в веб-разработке вы не можете предсказать, что будет брошено вам, а иногда и не стоит заботиться!
Классическим примером является полезная функция getimagesize, которая позволяет вам получить некоторую информацию об изображении, которое кто-то загрузил. Эта функция замаскирует шаткий, если файл изображения не является стандартным файлом изображения. На самом деле роль разработчиков не проверять файл, определить, может ли он быть загружен в getimagesize. Там могут быть элегантные способы сделать это, но серьезно мне все равно!
просто выполните это:
if( !($a = @getimagesize( $_FILE['file']['tmp_name'] )))
{
unlink( $_FILE['file']['tmp_name'] );
//politely tell user that you rejected their image!
}
да, вы можете использовать высказывания try и catch, которые более изящны, но в конце концов вы поймали ошибку и подавили сообщение об ошибке, которое вы хотели, не используя табуляцию!
Вопреки тому, что говорят выше, префикс @, используемый тщательно, не приводит к развалу крушения поезда. Это позволяет разработчику допускать ошибки в том, как они предпочитают.