PHP에서 @ 기호의 사용법은 무엇입니까?
PHPPHP에서 @ 기호의 사용법은 무엇입니까?
나는 다음과 같은 특정 함수 앞에 @를 사용하는 것을 보았다 :
$fileHandle = @fopen($fileName, $writeAttributes);
이 기호의 사용법은 무엇입니까?
해결법
-
==============================
1.오류 메시지를 표시하지 않습니다. PHP 매뉴얼의 오류 제어 연산자를 참조하십시오.
오류 메시지를 표시하지 않습니다. PHP 매뉴얼의 오류 제어 연산자를 참조하십시오.
-
==============================
2.오류를 억제합니다.
오류를 억제합니다.
설명서의 오류 제어 연산자를 참조하십시오.
-
==============================
3.@ 기호는 오류 제어 연산자 (일명 "침묵"또는 "셧업"연산자)입니다. PHP는 관련 표현식에 의해 생성 된 오류 메시지 (예고, 경고, 치명적 오류 등)를 억제합니다. 단항 연산자처럼 작동합니다. 예를 들어 우선 순위와 연관성이 있습니다. 다음은 몇 가지 예입니다.
@ 기호는 오류 제어 연산자 (일명 "침묵"또는 "셧업"연산자)입니다. 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 오류 처리기 대신 사용자 정의 오류 처리기를 사용하면 정확히 어떻게됩니까?
다음 코드 예제에서이를 보여줍니다.
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; }
-
==============================
4.또한 오류가 숨겨져 있음에도 불구하고 set_error_handler로 설정된 모든 사용자 정의 오류 처리기가 여전히 실행됩니다.
또한 오류가 숨겨져 있음에도 불구하고 set_error_handler로 설정된 모든 사용자 정의 오류 처리기가 여전히 실행됩니다.
-
==============================
5.이미 응답 한 일부 사람들처럼 : @ 연산자는주의 사항, 경고 및 심각한 오류까지 포함하여 PHP의 모든 오류를 억제합니다.
이미 응답 한 일부 사람들처럼 : @ 연산자는주의 사항, 경고 및 심각한 오류까지 포함하여 PHP의 모든 오류를 억제합니다.
하지만, 제발, 정말로 @ 연산자를 사용하지 마십시오.
왜?
왜냐하면 오류 억제를 위해 @ 연산자를 사용할 때 오류가 발생할 때 어디에서 시작해야하는지 전혀 알지 못하기 때문입니다. 이미 일부 개발자가 @ 연산자를 자주 사용하는 레거시 코드로 "재미"를 느꼈습니다. 특히 파일 조작, 네트워크 호출 등의 경우에는 많은 경우 개발자가 @ 연산자 사용을 권장하는 경우가 있습니다. 여기서는 오류가 발생했을 때 범위를 벗어나는 경우가 있습니다 (예 : 3rdparty API에 도달 할 수없는 경우 등). ).
그러나 여전히 그것을 사용하지 않는 것은 무엇입니까? 두 가지 관점에서 살펴 보겠습니다.
개발자로서 : @를 사용하면 시작할 위치를 전혀 알 수 없습니다. @가있는 함수 호출이 수백 또는 수천 개있는 경우 오류는 everyhwere와 같을 수 있습니다. 이 경우 합리적인 디버깅이 불가능합니다. 그리고 비록 그것이 단지 제 3 자 오류 일지라도 - 그러면 그것은 괜찮습니다. 그리고 당신은 빨리 끝났습니다. ;-) 또한, 오류 로그에 충분한 세부 사항을 추가하는 것이 더 좋으므로 개발자는 로그 항목이 추가로 확인해야하는 항목인지 아니면 개발자의 범위를 벗어나는 3rdparty 오류인지 쉽게 판단 할 수 있습니다.
사용자로서 : 사용자는 오류의 이유가 무엇인지 전혀 신경 쓰지 않습니다. 소프트웨어는 개발자가 실수를하거나 제 3 자 문제가 발생하더라도 작업을하거나 특정 작업을 완료 할 수 있습니다. 특히 사용자의 경우 범위를 벗어난 경우에도 모든 오류를 기록하는 것이 좋습니다. 어쩌면 특정 API가 자주 오프라인임을 알 수 있습니다. 당신은 무엇을 할 수 있나요? API 파트너에게 이야기 할 수 있으며 안정적인 상태로 유지할 수없는 경우 다른 파트너를 찾아야합니다.
간단히 말해서, @ (지식은 항상 좋은)과 같은 것이 있지만 그것을 사용하지 말아야한다는 것을 알아야합니다. 많은 개발자 (특히 다른 개발자의 코드 디버깅)는 매우 감사 할 것입니다.
-
==============================
6.열기가 실패하면 레벨 E_WARNING의 오류가 생성됩니다. 이 경고를 표시하지 않으려면 @를 사용할 수 있습니다.
열기가 실패하면 레벨 E_WARNING의 오류가 생성됩니다. 이 경고를 표시하지 않으려면 @를 사용할 수 있습니다.
-
==============================
7.우리가 "@"연산자를 사용하지 않았다면 우리 코드는 다음과 같이 보일 것입니다 :
우리가 "@"연산자를 사용하지 않았다면 우리 코드는 다음과 같이 보일 것입니다 :
$fileHandle = fopen($fileName, $writeAttributes);
그리고 우리가 열려고하는 파일을 찾지 못하면 어떨까요? 오류 메시지가 표시됩니다.
오류 메시지를 표시하지 않으려면 다음과 같이 "@"연산자를 사용합니다.
$fileHandle = @fopen($fileName, $writeAttributes);
-
==============================
8.@는 오류 메시지를 표시하지 않습니다.
@는 오류 메시지를 표시하지 않습니다.
다음과 같은 코드 스 니펫에 사용됩니다.
@file_get_contents('http://www.exaple.com');
"http://www.exaple.com"도메인에 액세스 할 수없는 경우 오류가 표시되지만 @는 표시되지 않습니다.
-
==============================
9.PHP는 하나의 오류 제어 연산자 인 at 기호 (@)를 지원합니다. PHP의 표현식 앞에 붙는 경우 해당 표현식에 의해 생성 될 수있는 오류 메시지는 무시됩니다.
PHP는 하나의 오류 제어 연산자 인 at 기호 (@)를 지원합니다. PHP의 표현식 앞에 붙는 경우 해당 표현식에 의해 생성 될 수있는 오류 메시지는 무시됩니다.
set_error_handler ()로 커스텀 에러 핸들러 함수를 설정했다면 여전히 호출 될 것입니다 만,이 커스텀 에러 핸들러는 error_reporting ()을 호출 할 수 있습니다. 에러를 일으킨 호출이 @ .
<?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) @ - 연산자는 표현식에서만 작동합니다.
2) 간단한 경험 법칙은 : 무언가의 가치를 취할 수 있다면 @ 연산자를 그 앞에 붙일 수 있습니다. 예를 들어, 변수, 함수 및 포함 호출, 상수 등을 앞에 붙일 수 있습니다. 함수 또는 클래스 정의 또는 if 및 foreach와 같은 조건부 구조에 앞에 추가 할 수 없습니다.
경고:-
-
==============================
10.여기에 @를 사용할 때 몇 가지 지침이 있다는 것을 알려주는 가치가있을 것입니다.이 게시물에 대한 완전한 실행을 위해서 : http://mstd.eu/index.php/2016/06/30/php- 신속한 - 무슨 - 상징 - 사용 -에 -에 대한 PHP /
여기에 @를 사용할 때 몇 가지 지침이 있다는 것을 알려주는 가치가있을 것입니다.이 게시물에 대한 완전한 실행을 위해서 : http://mstd.eu/index.php/2016/06/30/php- 신속한 - 무슨 - 상징 - 사용 -에 -에 대한 PHP /
-
==============================
11.@는 함수가 던진 오류 메시지를 표시하지 않습니다. 파일이 종료되지 않으면 fopen에서 오류가 발생합니다. @ 기호는 파일이 없어도 실행을 다음 줄로 이동합니다. 내 제안은 당신이 PHP 코드를 개발할 때 당신의 지역 환경에서 이것을 사용하지 않을 것이다.
@는 함수가 던진 오류 메시지를 표시하지 않습니다. 파일이 종료되지 않으면 fopen에서 오류가 발생합니다. @ 기호는 파일이 없어도 실행을 다음 줄로 이동합니다. 내 제안은 당신이 PHP 코드를 개발할 때 당신의 지역 환경에서 이것을 사용하지 않을 것이다.
from https://stackoverflow.com/questions/1032161/what-is-the-use-of-the-symbol-in-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP를 사용할 때 MySQL 대 MySQLi [닫힘] (0) | 2018.09.05 |
---|---|
PHP는 방법 체인? (0) | 2018.09.05 |
쓰기 컨텍스트에서 메서드 반환 값을 사용할 수 없습니다. (0) | 2018.09.05 |
웹 MVC 애플리케이션에 액세스 제어 목록을 구현하려면 어떻게해야합니까? (0) | 2018.09.05 |
file_get_contents를 사용하여 PHP로 데이터를 게시하는 방법은 무엇입니까? (0) | 2018.09.05 |