2010-06-18 2 views
0

모두

PHP에서 '@'기호의 의미는 무엇입니까?

$sd = (@$argv[1]) ? getdate(strtotime($argv[1])) : getdate(); 

내가 삼항 연산자를 이해하지만, 나는

코드 샘플 코드는 ... (가) '@'무엇을 의미하는지 아무 생각이 없다 '?': 예를 들어,이 성명에서 무엇을 의미 하는가 (아주 좋은!) cs75.net 하버드 확장 과정.

감사

JDelage

+0

속는 사람이 겉보기에 무해한 연산자는 실제로 배경에서 상당히 많이 사용하는 작업을 수행합니다. http://stackoverflow.com/questions/2279289/what-is-the-meaning-of-in-phpclosed –

+0

젠장, 나는 그것을 찾았지만 아무 것도 찾을 수 없었다. 대답은 IMHO입니다. – JDelage

답변

9

다음은 기능 (또는 표현)의 과정으로 제조 될 수있다 @symbol suppresses any errors.

PHP는 하나의 오류 제어 연산자 인 at 기호 (@)를 지원합니다. PHP의 표현식 앞에 붙는 경우 해당 표현식에 의해 생성 될 수있는 오류 메시지는 무시됩니다.

오류 방지는 중지하려는 오류를 억제하는 것이 아니라 예측하지 못한 오류도 억제하므로 가능하면 피해야합니다. 이렇게하면 디버깅이 악몽이됩니다.

1

$argv[1]이 정의되어 있는지 검사 할 수 없으며 그가 얼마나 게으른 지 알려주는 경고를보고 싶지 않은 프로그래머를위한 해결책입니다. 일컬어 error suppression. E_NOTICE

$argv = Array("Only one object."); 
if ($argv[1]) { print "Argv[1] set"; } 

는 경고를 야기 설정되어 있지만

$argv = Array("Only one object."); 
if (@$argv[1]) { print "Argv[1] set"; } 

단순히 아무것도 인쇄하지 않는다면

+1

또는 언급하지 않는 * lazy * answerer는'isset ($ argv [1])'또는'! empty ($ argv [1])';)로 바뀌어야합니다 – gnarf

+0

OP는 그것이 무엇인지 물었습니다 :) –

3

@ supressess 표현에서 오류 메시지, 즉,.

는 대신

if (!empty($var)) { print "Argv[1] is set and non-false."; } 

를 사용하는 것이 훨씬 더 연습 있다고하지만 명심하십시오.

1

다른 사람들은 @이 오류 메시지를 표시하지 않는다고 설명했습니다. 일리아 Alshanetsky의 talk "PHP 및 성능"부터 재미있는 사실 :

오류 차단 연산자는 PHP의 알파벳에서 가장 비싼 문자입니다. SO 검색이 기호와 정확히 도움이되지 않습니다하지만,

$old = ini_set("error_reporting", 0); 
action(); 
ini_set("error_reporting", $old); 
관련 문제