2014-05-22 3 views
4

preg_match은 참조로 $matches 인수를 허용합니다. 내가 본 모든 예제는 인수로 전달되기 전에 초기화하지 않습니다. 좋아요 :

preg_match($somePattern, $someSubject, $matches); 
print_r($matches); 

이 오류가 발생하지 않았습니까? $matches에 이미 값이 포함되어 있으면 어떨까요? arg로 전달하기 전에 빈 배열로 초기화해야한다고 생각합니다. 이와 같이 :

$matches = array(); 
preg_match($somePattern, $someSubject, $matches); 
print_r($matches); 

나는 단지 편집증인가?

+0

시도해 보셨습니까? 그 결과는 무엇입니까? – Toto

+0

@ M42 나는 가지고있다. 그러나 나는 공식적으로 어디에서나이 질문에 답을 본 적이 없다. preg_match 문서에는 언급되어 있지 않습니다. – dellsala

답변

5

$ matches가 결과로 업데이트되므로 초기화 할 필요가 없습니다. 사실상 함수에서 두 번째 반환 값입니다.

+1

아니요, 참조로 전달되므로 덮어 쓰지 않고 업데이트됩니다. – AbraCadaver

+2

확인되었습니다. 그 값은 덮어 씁니다. –

1

Chris Lear가 $matches을 초기화 할 필요가 없다고 말했습니다. 당신의 패턴이 나중에 사용하려는 캡처 그룹을 포함하는 경우, 그것은 더 나은 작성하는 것입니다 :

$somePattern = '/123(456)/'; 
if (preg_match($somePattern, $someSubject, $matches)) { 
    print_r($matches[1]); 
} 

이 결과 배열에 정의되지 않은 인덱스의 오류를 방지 할 수 있습니다. 그러나 isset($matches[1])을 사용하여 색인이 존재하는지 확인할 수 있습니다.

관련 문제