Что делает префикс '@' в PHP?

Что означает символ «@» в следующем коде?

@mkdir(ROOT. "cache/"); 

Related of "Что делает префикс '@' в PHP?"

Он подавляет ошибки при отображении :

PHP поддерживает один оператор управления ошибкой: знак at (@). При добавлении выражения в PHP любые сообщения об ошибках, которые могут быть сгенерированы этим выражением, будут игнорироваться.

Если функция track_errors включена, любое сообщение об ошибке, сгенерированное выражением, будет сохранено в переменной $ php_errormsg. Эта переменная будет перезаписана при каждой ошибке, поэтому сначала проверьте, хотите ли вы ее использовать.

Как отмечалось в комментариях, я тоже не могу представить себе причину, чтобы фактически использовать эту функциональность – написать код, который соответствующим образом соответствует состояниям / состояниям ошибок.

Как указывалось, это оператор подавления ошибок.

Но то, о чем не было указано, заключается в том, что использовать эту очень плохую практику – ошибки не должны терпеть неудачу молча.

Проверьте наличие ошибок и используйте блоки try / catch, в которых используются исключения.

В конкретном примере …

 @mkdir(ROOT. "cache/"); 

… он игнорирует любые ошибки из mkdir() . Документы говорят, что он возвращает 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, которые более изящны, но в конце концов вы поймали ошибку и подавили сообщение об ошибке, которое вы хотели, не используя табуляцию!

Вопреки тому, что сказано выше, префикс @, используемый тщательно, не приводит к развалу крушения поезда. Это позволяет разработчику допускать ошибки в том виде, в котором они предпочитают.