2008-09-26 4 views
5

저는 PHP를 처음 사용 했으므로 @mysql_ping()과 같은 @ 접두사가있는 함수를 호출하는 예제를 보면서 혼란 스럽습니다.PHP 별칭 @ 함수

무엇입니까? @ 검색 결과가 삭제되고 '별칭'이 키워드로 충분하지 않기 때문에 검색/검색이 도움이되지 않습니다.

답변

15

@는 오류, 경고 및주의 사항을 표시하지 않습니다.

사용자 정의 error handler으로 보완하거나 $ php_errormsg 변수를 만지면 오류를 제대로 처리 할 수 ​​있으므로 좋은 목적으로 사용할 수 있습니다.

제 경험상,이 올바른 사용법은별로 보이지 않으며 대신 나쁜 행동으로 많이 사용되어 오류없이 행동을 숨길 수 있습니다. http://www.php.net/manual/en/language.operators.errorcontrol.php

+0

잘 게으른 ...의 그것이 "던져, 한 번 실행"스크립트에 대한 유용한입니다 가정 해 봅시다. 어떤 경우이든, 나쁜 습관입니다. –

+2

그렇지 않으면 오류 처리기가있는 경우 오류 알림을 표시하지 않는 것이 좋습니다. – eyelidlessness

+0

"일반적으로 오류 코드를 확인하고 싶지 않은 게으른 프로그래머가 사용합니다."- 완전히 잘못되었습니다. @는 PHP가 "try/catch"를 수행하는 방법과 정확히 일치합니다. http://www.php.net/manual/en/language.operators.errorcontrol.php – Havenard

2

"php at symbol"로 검색하면 PHP에서 호출이 발생하는 오류 메시지를 표시하지 말 것을 요청합니다.

3

이 오류 메시지의 출력을 억제합니다. 여기 다른 주석가와는 달리, 나는 이것을 사용하는 것이 좋은 프로그래밍 습관이라고 생각한다 (특히 출력 페이지의 html로 출력이 혼합되는 웹 앱을 개발하는 경우).

mysql_connect와 같은 함수는 리소스 식별자를 반환하고 에러시에는 FALSE를 반환합니다. @mysql_connect (...)를 사용하고 반환 값을 확인하십시오.

0

기호 앞에 함수를 붙이면 오류가 발생하면 PHP 오류 처리기가 트리거됩니다. 당신이 그것을 사용하기로 결정했다면 모든 오류 처리를해야한다는 것을 명심하십시오.

$test = @file_get_contents('nonexistant.file'); 
if(!$test) 
{ 
    die('Failed'); 
} 

더 좋은 방법은 display_errors를 끄고 사용자 지정 오류 처리기를 (Error Exception 참조)를 사용하는 것입니다.

1

출력 될 수있는 오류를 모두 억제합니다.

고통과 어려움의 처방입니다. 오류가 발생하면 필연적으로 어려움을 겪으므로 시간을내어 원인을 추적해야합니다. @ 연산자가 사용되지 않은 경우 초 단위로 오류가 발견됩니다.

사용할 이유가 없으므로 display_errors 및 error_log ini 설정을 사용하여 라이브 사이트에 오류가 표시되지 않도록하고 개발자 사이트에 표시되도록하십시오.

보고 싶지 않은 오류가있는 경우 표시하지 않는 것이 좋을 것입니다.

외부 lib의 컨트롤 밖에있는 경우 로그에 쓰고 프로덕션의 display_errors를 해제하고 함께 살면됩니다. 왜냐하면 당신이 현재 억압하고있는 오류와 함께 살아가고 있다는 오류가 항상 거기에서 던져지는 오류가 될 것인지를 알려주지 않기 때문입니다.

@ === BAD

0

관리자 당신이 PHP 환경과 놀고 싶어하지 않거나 값이 중요하지 않습니다 주로 화장품, 특히 때로는 그 유용성은있다.기억, 그래도; 그것은 해결 방법이 아니라 만병 통치약입니다.

[...]

.$foutDate = @filemtime($keyring); /* Don't care, as we've already established file */ 

$f["date"] = $foutDate; 

$f["fullDate"] = date("r", $foutDate); 

[...]