PHP에서 @ 기호의 용도는 무엇입니까?
나는 의 용도를 본 적이 있다.@
을 사용하다
$fileHandle = @fopen($fileName, $writeAttributes);
이 기호의 용도는 무엇입니까?
오류 메시지를 억제합니다. PHP 매뉴얼의 오류 제어 연산자를 참조하십시오.
오류를 억제합니다.
PHP는 하나의 오류 제어 연산자(@)를 지원합니다.PHP 식 앞에 추가되면 해당 식에서 발생할 수 있는 오류 메시지는 무시됩니다.
set_error_handler()를 사용하여 커스텀에러 핸들러 함수를 설정해도 이 커스텀에러 핸들러는 error_reporting()을 호출할 수 있습니다(또한 이 커스텀에러 핸들러는 에러를 트리거한 콜이 @... 앞에 있을 때0 을 반환합니다).
@
symbol은 오류 제어 연산자("symbol" 또는 "shut-up" 연산자라고도 함)입니다.PHP는 관련 식에 의해 생성되는 오류 메시지(알림, 경고, 치명 등)를 억제합니다.이는 단항 연산자와 동일하게 작동하며, 예를 들어 우선 순위와 연관성이 있습니다.다음은 몇 가지 예입니다.
@echo 1 / 0;
// generates "Parse error: syntax error, unexpected T_ECHO" since
// echo is not an expression
echo @(1 / 0);
// suppressed "Warning: Division by zero"
@$i / 0;
// suppressed "Notice: Undefined variable: i"
// displayed "Warning: Division by zero"
@($i / 0);
// suppressed "Notice: Undefined variable: i"
// suppressed "Warning: Division by zero"
$c = @$_POST["a"] + @$_POST["b"];
// suppressed "Notice: Undefined index: a"
// suppressed "Notice: Undefined index: b"
$c = @foobar();
echo "Script was not terminated";
// suppressed "Fatal error: Call to undefined function foobar()"
// however, PHP did not "ignore" the error and terminated the
// script because the error was "fatal"
표준 PHP 오류 핸들러 대신 커스텀 오류 핸들러를 사용하면 정확히 어떤 일이 발생합니까?
set_error_handler()를 사용하여 커스텀에러 핸들러 함수를 설정해도 이 커스텀에러 핸들러는 error_reporting()을 호출할 수 있습니다(또한 이 커스텀에러 핸들러는 에러를 트리거한 콜이 @ 앞에 있었을 때0 을 반환합니다).
이것은, 다음의 코드 예에 나타나 있습니다.
function bad_error_handler($errno, $errstr, $errfile, $errline, $errcontext) {
echo "[bad_error_handler]: $errstr";
return true;
}
set_error_handler("bad_error_handler");
echo @(1 / 0);
// prints "[bad_error_handler]: Division by zero"
가, 에러 핸들러가, 에러 핸들러의 유무를 .@
호가유유 유유유다다은 다음과같은 하고 있습니다.
function better_error_handler($errno, $errstr, $errfile, $errline, $errcontext) {
if(error_reporting() !== 0) {
echo "[better_error_handler]: $errstr";
}
// take appropriate action
return true;
}
, , 「」, 「」, 「」, 「」( 「」)로 되어 있는 해 주세요.set_error_handler
는 계속 는 계속 실행됩니다.
"CHANGE: "CHANGE: " 。@
및 오류를 PHP의 합니다.operator, operator는 PHP를 사용합니다.
하지만: 꼭 주세요.@
이치노
왜요?
.@
오류 억제를 위한 연산자. 오류가 발생할 때 어디서 시작해야 할지 전혀 알 수 없습니다. 일부 이 "재미있게" "에는 "" 이 있다.@
오퍼레이터를 자주 호출합니다.특히 파일 조작, 네트워크 콜 등의 경우에는 더욱 그렇습니다.입니다.@
여기서 오류가 발생했을 때(예를 들어 서드파티 API에 도달할 수 없는 경우 등) 연산자가 범위를 벗어날 수 있습니다.
그래도 안 쓰는 이유가 뭐야?다음 두 가지 관점에서 살펴보겠습니다.
개발자로서:언제@
사용 중이라 어디서부터 시작해야 할지 전혀 모르겠습니다.개 개일 , 함수 호출이 "수백 개" 또는 " 개"로 됩니다.@
오류는 다른 모든 오류와 다를 수 있습니다.이 경우 합리적인 디버깅은 불가능합니다.게다가 서드파티제의 에러라도, 에러 로그에 충분한 상세를 추가하는 것이 좋습니다.따라서 개발자는 로그 엔트리가 더 이상 체크할 필요가 있는지, 아니면 개발자의 범위를 벗어나는 서드파티제의 에러인지 쉽게 판단할 수 있습니다.
사용자로서:사용자는 오류의 원인이 무엇인지에 대해 전혀 신경 쓰지 않습니다.소프트웨어는 작업, 특정 작업 완료 등을 위해 존재합니다.개발자의 과실이든 서드파티 문제든 상관없습니다.특히 사용자의 경우 범위를 벗어나더라도 모든 오류를 기록할 것을 강력히 권장합니다.특정 API가 자주 오프라인 상태임을 알 수 있습니다.당신은 무엇을 할 수 있나요?API 파트너와 상의하여 API를 안정적으로 유지할 수 없는 경우 다른 파트너를 찾아야 합니다.
요컨대 다음과 같은 것이 존재한다는 것을 알아야 합니다.@
(지식은 항상 좋은 것이지만) 사용하지 마세요.많은 개발자(특히 다른 사람의 디버깅 코드)는 매우 고마워할 것입니다.
"@" 연산자를 사용하지 않은 경우 코드는 다음과 같습니다.
$fileHandle = fopen($fileName, $writeAttributes);
그리고 열려는 파일이 발견되지 않으면 어떻게 하죠?에러 메세지가 표시됩니다.
오류 메시지를 억제하기 위해 다음과 같은 "@" 연산자를 사용합니다.
$fileHandle = @fopen($fileName, $writeAttributes);
@
에러 메시지를 억제합니다.
다음과 같은 코드 스니펫에 사용됩니다.
@file_get_contents('http://www.exaple.com');
「httpwww..com할 수 없는 만, 「http://www.exaple.com」는 「http://www.exaple.com」, 「http://www.exaple.com」는 「http://www.exaple.com」, 「http://www.exaple.com」, 「http://www.exaple.com」는 「http://www.exaple.com」, 「http://www.exaple.com」, 「http://www.exaple.com」, 「http://www.exaple.com」,@
이치노
오픈에 실패하면 레벨 E_WARNING 에러가 발생합니다.이 경고를 억제하려면 @ 를 사용할 수 있습니다.
는 하나의 연산자를 합니다. sign PHP at sign PHP sign는 php sign php php php php php php php 。(@)
PHP 식 앞에 추가되면 해당 식에 의해 발생할 수 있는 오류 메시지는 무시됩니다.
를 「」로 .set_error_handler()
계속 만, 이 커스텀에러 핸들러는, 콜 할 수 있습니다( 콜 할 필요가 ).error_reporting()
은 반환될 것이다.0
한 에 「」가 붙어 있는 ,@
.
<?php
/* Intentional file error */
$my_file = @file ('non_existent_file') or
die ("Failed opening file: error was '$php_errormsg'");
// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.
?>
주의:-
1) @-operator는 식에서만 작동합니다.
2) 간단한 경험칙은 다음과 같습니다.무엇의 값을 취할 수 있다면 그 앞에 @ 연산자를 붙일 수 있습니다.예를 들어 변수, 함수, 콜, 상수 등에 추가할 수 있습니다.함수 또는 클래스 정의 또는 if 및 foreach 등의 조건부 구조 앞에 추가할 수 없습니다.
경고:-
현재 "@" 오류 제어 연산자 접두사는 스크립트 실행을 종료하는 중요한 오류에 대한 오류 보고도 비활성화합니다.특히 특정 함수의 오류를 억제하기 위해 "@"를 사용하면 사용할 수 없거나 잘못 입력된 경우 스크립트는 이유를 알 수 없이 바로 종료됩니다.
@를 사용할 때 주의할 점이 몇 가지 있습니다.이 투고에는, http://mstd.eu/index.php/2016/06/30/php-rapid-fire-what-is-the-symbol-used-for-in-php/ 를 참조해 주세요.
에러 핸들러는, @ 기호가 부가되어 있어도 기동합니다.이것은 에러 레벨0 이 설정되어 있는 것을 의미합니다.이것은 커스텀에러 핸들러에서 적절히 처리되어야 합니다.
include에 @를 붙이면 include 파일의 모든 오류가 오류 수준 0으로 설정됩니다.
@
함수에 의해 느려지는 에러 메시지를 억제합니다. fopen
파일이 종료되지 않으면 에러가 발생합니다. @
symbol을 지정하면 파일이 존재하지 않는 경우에도 다음 행이 다음 행으로 이동합니다.PHP 코드를 개발할 때 로컬 환경에서 이것을 사용하지 않는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/1032161/what-is-the-use-of-the-symbol-in-php
'programing' 카테고리의 다른 글
java.io을 입수하려면 어떻게 해야 하나요?java.lang의 InputStream.스트링? (0) | 2022.09.05 |
---|---|
urlib 및 python을 통한 사진 다운로드 (0) | 2022.09.05 |
파일:// URL에서 실행 중인 응용 프로그램에서 발생한 요청에 대한 "Origin null은 Access-Control-Allow-Origin에 의해 허용되지 않습니다" 오류입니다. (0) | 2022.09.04 |
MYSQL 범위가 작동하지 않음 (0) | 2022.09.04 |
php/SQL이 NULL을 반환합니다. (0) | 2022.09.04 |